2

我有一个包含一些方法的库,并且在某些错误期间,我希望它调用调用者定义的方法。此方法必须返回一个布尔值。我的意思是:

Sock sock = new Sock();
sock.OnSpecificError(theMethodToCall);

然后当错误发生时,sock 应该首先检查是否设置了 OnSpecificError。如果有,它应该运行它。如果该方法返回 false 或未设置 OnSepcificError,则应引发异常。

这似乎是代表设计的那种东西,但无论出于何种原因,我似乎无法理解这些代表实际在做什么,例如,正在传递什么以及我以后如何运行它。我目前处理这个问题的方法既愚蠢又麻烦,所以任何帮助都将不胜感激。

编辑:让我澄清一下。sock.OnSpecificError(method) 用于简单地传递 sock 一个方法,它将存储但不运行。然后的想法是,稍后,当 sock 运行一些其他方法时,如果弹出错误,它应该运行该方法。我想保留该方法以供以后使用,然后在需要时运行它。

4

1 回答 1

3

从委托开始的最简单方法是使用预定义的委托。例如,不带参数并返回 a 的委托bool将是Func<bool>. 接受 astring和 anint并返回 a的委托bool将是Func<string,int,bool>,依此类推。

你定义你的方法是这样的:

void OnSpecificError(Func<bool> errorCheck) {
    // Do your stuff...
    var gotErrors = errorCheck();
    if (gotErrors) {
        // Do something about it
    }
}

您现在可以OnSpecificError这样调用:

sock.OnSpecificError(CheckForErrors);

private bool CheckForErrors() {
    return errorCode.Equals("YES");
}

您还可以使用lambdas内联小方法,如下所示:

sock.OnSpecificError(() => errorCode.Equals("YES"));
于 2012-04-26T21:32:50.810 回答