首页 > Linux操作系统 > Linux操作系统 > 什么是委托(delegate)
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->public delegate void EventHandler(object sender, EventArgs e);
上面的代码可以看成是定义一个delegate的类,类的名字是EventHandler。下面是我定义一个普通的类,看看它们之间有什么区别:
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->public class UserInfo{}
可以看到,delegate的类和普通的类的定义还是有比较大的不同的,这只要记住它的格式就行了。我们再看看创建类的实例:
Code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->UserInfo userInfo = new UserInfo();
EventHandler handler = new EventHandler(MethodName);
从代码中可以,它和创建普通的类的实例没什么不同,只是它必须要有参数,而且只能有一个。这个参数很特别,它不是什么类型的参数,而是方法的名字。方法有很多的类型(这里不是指public,static等等这种类型),就像参数也有很多种类型一样,它总不能是无论什么样的方法都接受吧。那是当然的了,它到底能接受什么样的方法呢。这就需要用到修饰了。
上前面,我们看到了定义delegate的类有很大的不同。在它的后面多了一个void,它的前面也多了两个参数,这些是干什么用的呢?可能你已经想到了,就是用来修饰方法的类型的。它限定了方法的返回值必须是void,它的参数是(object sender, EventArgs e),只要符合这两个要求的方法都可以传给它。
上面的代码还可以简单地写成:EventHandler handler= MethodName;。这样赋值的话,它的实例像不像是一个方法指针了呢?赋值后我们就能像调用方法一样调用它了,如:handler(sender, e); ,调用handler,就相当于是调用了方法MethodName。通过handler调用MethodName的过程就叫做代理,也可以叫做委托,也就是MethodName把使用权委托给handler。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-442293/ ,如需转载,请注明出处,否则将追究法律责任。