什么是委托(delegate)

         委托(delegate),刚开始学的时候觉得很难理解,我们可以把它看作是一个修饰符,用来修饰一个类的类型,就像public, static等一样。定义一个delegate类和我们平时定义类差不多。我们来看一下我们经常用到的EventHandler类的定义,它是.NET中的一个类:

 

public delegate void EventHandler(object sender, EventArgs e);
  上面的代码可以看成是定义一个delegate的类,类的名字是EventHandler。下面是我定义一个普通的类,看看它们之间有什么区别:

 

public class UserInfo{}
  可以看到,delegate的类和普通的类的定义还是有比较大的不同的,这只要记住它的格式就行了。我们再看看创建类的实例:

 

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。


文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/200897/139933.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值