如何定义一个delegate并且在何处使用?Tony Patton在本文中深入讨论了delegate。
如何定义一个delegate并且在何处使用?Tony Patton在本文中深入讨论了delegate。
在最近有关.NET项目一次技术采访中,我被问到了关于定义术语的问题。由于项目是采用C#的.NET平台,所以问题就集中在C#上面。采访的过程非常有趣,但有一个特别的问题却是使我兴致大减,这一问题是:我是否必须定义delegate。虽然我已经广泛地使用它,但我还是很难从定义上回答。尽管我已经尽力回答,我还是感到事实尴尬。事实上,一个MCSD.NET应该能够毫无疑问地回答这样的问题。
根据微软的说法,一个delegate声明指定了一个相关的类型,你可以使用这一类型来封装一个含有特定标记的方法。一个delegate实例可以封装一个静态或一个实例方法。粗略的看来,Delegates就好象是C++中的函数指针;然而,delegates属于安全和保护类型。
我的采访是通过电话进行,所以我可以很容易和轻松地阐述这些定义。透明和详尽的解释是必须的。然而,作为贴切的delegates定义是,即使在没有对目标对象(target object)有任何了解的情况下,也可以随时使用某种方法,这样的方法即为delegates。很多开发人员通常将它们说成回调函数(callback functions)。现在让我们看一个范例,以更好理解它的应用。
我们的范例程序开始于两个简单的C#类,这两个类包含一个方法以通过控制台来显示信息:
public class DelegateClass1 {
public void exampleMethod1(String passedString) {
Console.WriteLine(passedString); }
}
public class DelegateClass2 {
public void exampleMethod2(String passedString) {
Console.WriteLine(passedString); }
}