将方法作为参数传递,以便稍后调用该方法?

时间:2012-04-26 21:26:31

标签: c# delegates

我有一个带有一些方法的库,在某些错误中我希望它调用调用者定义的方法。此方法必须返回bool。我的意思是:

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

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

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

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

1 个答案:

答案 0 :(得分:3)

从代理开始的最简单方法是使用预定义的方法。例如,不带参数并返回bool的委托将是Func<bool>。获取stringint并返回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"));