A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏振龙 中级黑马   /  2012-7-11 10:57  /  1489 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

委托是什么?相当于C++中的什么概念啊?有没有通俗点的讲解

2 个回复

倒序浏览
委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
给你举个例子:
//声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void  NewDelegate();
//下面定义的a,b两种方法,你可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
       NewDelegate dgt1=new NewDelegate(a);
       NewDelegate dgt2=new NewDelegate(b);
  //dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
}

事件是一种特殊的委托,为什么这么说呢?
用反编译工具反编译.net framework即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区别),如下:
public delegate void EventHandler(object sender, EventArgs e);
而常见的各种控件的Click事件是如何定义的呢?
public event EventHandler Click;
说明 Click事件是一个委托
而我们常见的一个Button控件添加一个事件是怎么做的呢?
PageLoad里:Button1.Click+=new EventHandler(Button1_Click);
定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}
如你所见,这是一个很典型的委托调用。
相当于C++中的函数指针吧!!
回复 使用道具 举报
1,C#中的委托类似于C++中的函数指针,但两者有本质区别;
2,C++不是类型安全的;
3,C#中的委托是面向对象的,而且是类型安全的;
4,事实上,委托是一个引用类型,用来封装带有特定签名和返回类型的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马