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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩继新 中级黑马   /  2013-9-20 19:27  /  1406 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩继新 于 2013-9-22 11:25 编辑

一直知道委托就是事件,但是对于委托和事件具体是什么关系,还是不大清楚,还有什么情况下用委托合适

评分

参与人数 1技术分 +1 收起 理由
陈行 + 1

查看全部评分

5 个回复

倒序浏览
1.委托和事件就好比属性和字段的关系  属性起到一个保护字段的作用  事件就是起到保护委托的作用  不让委托乱赋值   
2.例如有一段代码你需要写成一个方法  但是方法里面包含另一个方法  而且里面的方法也不是绝对相同  这时候就把里面的方法写成委托  
   口才不好哈  有可能看不懂~
回复 使用道具 举报 1 0
谢了,我好好看看
回复 使用道具 举报
委托是一个类型,就像类一样,而事件是一个实例(委托的实例中的一种)。
事件与委托的关系好比字段与属性的关系。事件实际上是一种委托属性。但是!事件与属性有一个最明显的不同,也就是属性是必须实现的,事件则是不必的。或者说,事件是最早出现的自动属性。与自动属性一样,事件也会创建一个字段来保存对应的委托实例,而这个字段与事件同名且是私有。在C#中,你可以访问到这个字段,因为它真的就是一个字段。换言之,当你在C#中写代码时,如果是在类型内部使用类型的事件,其实就是引用到那个自动生成的私有字段。换言之,在类的内部使用事件的时候,你使用的是一个委托字段而不是事件。对这个字段的操作是完全不同于在类的外部使用事件的。而它在类的外部也是访问不到的,因为这个字段是私有的。
希望对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
陈行 + 1

查看全部评分

回复 使用道具 举报
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递
事件它封装了委托类型的变量,使得:在类的内部,不管你声明它是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
委托与事件命名规范:
委托类型的名称都应该以EventHandler结束。
委托的原型定义:有一个void返回值,并可以两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
事件的命名为 委托去掉 EventHandler之后的部分。
继承自EventArgs的类型应该以EventArgs结尾。

评分

参与人数 1技术分 +1 收起 理由
陈行 + 1

查看全部评分

回复 使用道具 举报
委托
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:

C#
public delegate int PerformCalculation(int x, int y);

与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。只要知道委托的签名,便可以分配自己的委托方法。

将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。例如,可以向排序算法传递对比较两个对象的方法的引用。分离比较代码使得可以采用更通用的方式编写算法。

委托概述
委托具有以下特点:

委托类似于 C++ 函数指针,但它是类型安全的。

委托允许将方法作为参数进行传递。

委托可用于定义回调方法。

委托可以链接在一起;例如,可以对一个事件调用多个方法。

方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。

C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

如何使用委托,请看
(VS.80).aspx

事件

在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。

在典型的 C# Windows 窗体或 Web 应用程序中,可订阅由控件(如按钮和列表框)引发的事件。可使用 Visual C# 集成开发环境 (IDE) 来浏览控件发布的事件,选择要处理的事件。IDE 会自动添加空事件处理程序方法和订阅事件的代码。有关更多信息,请参见如何:订阅和取消订阅事件(C# 编程指南)。

事件概述
事件具有以下特点:

发行者确定何时引发事件,订户确定执行何种操作来响应该事件。

一个事件可以有多个订户。一个订户可处理来自多个发行者的多个事件。

没有订户的事件永远不会被调用。

事件通常用于通知用户操作(如:图形用户界面中的按钮单击或菜单选择操作)。

如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序。要异步调用事件,请参见使用异步方式调用同步方法。

可以利用事件同步线程。

在 .NET Framework 类库中,事件是基于 EventHandler 委托和 EventArgs 基类的。

关于如何使用事件相关的知识,请看
(VS.80).aspx
这个可以看出他和委托的联系

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马