2012-04-26 92 views
2

我有一个库的一些方法,并在某些错误期间,我希望它调用调用方定义的方法。这个方法必须返回一个布尔值。我的意思是:将方法作为参数传递,以便以后可以调用该方法?

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

然后当错误发生,袜子应先检查,看看是否OnSpecificError已设置。如果有,它应该运行它。如果该方法返回false或者如果OnSepcificError没有被设置,它应该抛出一个异常。

这似乎是委托人设计的那种事情,但无论出于什么原因,我似乎都无法理解那些实际正在做的事情,例如,传递什么以及如何传递稍后运行它。我目前处理这种方法是愚蠢和繁琐的,所以任何帮助将不胜感激。

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

回答

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"); 
} 

您还可以使用lambda表达式内联小方法,如:

sock.OnSpecificError(() => errorCode.Equals("YES")); 
+0

好吧,我想我得到这个,让我试一试一定要知道。所以Func <>是一个预定义的委托? “>”在C#的世界中意味着什么?我从来没有能够得到一个好的答案,因为谷歌勉强当我尝试谷歌<> – cost 2012-04-26 21:40:02

+0

其实不,我不是在寻找。看看我对我的回答所做的修改,我试图澄清。 – cost 2012-04-26 21:48:02

+0

@cost''''是*泛型参数*的地方。 'Func <>'是一组预定义的泛型委托类型。您可以通过提供一个或多个类型参数来指示参数类型和委托的返回类型来扩展它。 – dasblinkenlight 2012-04-26 21:48:23

相关问题