事件是委托的实例呢?还是:事件也是一个类呢? 事件是委托的实例呢?还是:事件也是一个类呢?我想问,本质上,事件是类还是对象。对于委托,它是类,不是对象。但是事件呢?本质上是类,还是对象呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 event都可以通过delegate来完成。event强调了事件。通过订阅事件来获得通知delegate则泛指符合某种格式的函数C# 中的委托和事件 定义一个“public event {事件类型} {事件实例};” 的时候,你声明了一个实例(因此你不需要写new代码来创建这个实例),此时当然也使用了事件的类型。实际上这里的{事件类型}就是一种委托。 sorry,可能有一个误会: “你声明了一个实例” 应该写为 “你声明了一个变量”。 我不知道“本质”这个词是不是太夸张了。这没有什么本质不本质的,因为实在是非常简单的语法糖。比如有人说他自定义个TextBox控件类型中定义了一个事件名叫“网警正在翻看信息”用于提醒使用者一些事情,那么这个事件在类型定义中就跟你的属性、字段一样,也不过是个变量。它实际上你可以简单地定义为delegate,这样别人使用这个TextBox实例(比如变量a)时不但可以直接针对a的这个事件使用 a.网警正在放看信息 += .....的方式注册自己的事件处理方法,可以像任何字段、属性一样地随便改变它(重新赋值,而不仅仅是使用delegate的+=、-=方法)。但是如果你定一个event关键字,那么编译器就不允许别人胡乱使用它,而只能使用+=、-=两个方法来使用它。 事件其实就是一个特殊的委托。MSDN中是这样描述事件的:事件是特殊类型的多路广播委托,仅可从声明它们的类或结构(发行者类)中调用。如果其他类或结构订阅了该事件,则当发行者类引发该事件时,会调用其事件处理程序方法。对于这一点,我们也可以从事件的定义中看出,不过就是在定义委托对象时加了event关键字表明这个委托现在叫事件。-------------------------------这应该比较权威了吧。 事件不是类,也不是委托实例,而是一个方法。这个方法太特别,以至于C#专门引入“事件”这个概念来指称它。事件的职责就是将委托串联在一起。一个事件背后通常会有一个委托类型的变量,但是通过自己编写 add/remove 访问器,你可以改变这个模式。事件是一个方法,也意味着,你可以用 virtual, abstract 这样的关键字来修饰它。但是这个视角非常的别扭,反正我在处理 Button.Click 时是不会想到这些的 用delegate声明的委托其实是类型, 事件其实是委托的实例,基于委托链实现的 datagridview自动增加行的问题 VS2005出现异常错误自动退出 请教一个用户个人信息问题 c#如何加密字符串? vs2005怎样连接数据库2000 asp.net反转13位的时间戳? 数据库问题 时间判断问题 datagrid编辑行的问题 字符串转换问题 请大家告诉我。。。。。。。。。。 原上传图片代码现想换成上传视频的代码,求讲解 WPF的按钮显示问题
event强调了事件。通过订阅事件来获得通知
delegate则泛指符合某种格式的函数
C# 中的委托和事件
定义一个“public event {事件类型} {事件实例};” 的时候,你声明了一个实例(因此你不需要写new代码来创建这个实例),此时当然也使用了事件的类型。实际上这里的{事件类型}就是一种委托。
我不知道“本质”这个词是不是太夸张了。这没有什么本质不本质的,因为实在是非常简单的语法糖。比如有人说他自定义个TextBox控件类型中定义了一个事件名叫“网警正在翻看信息”用于提醒使用者一些事情,那么这个事件在类型定义中就跟你的属性、字段一样,也不过是个变量。它实际上你可以简单地定义为delegate,这样别人使用这个TextBox实例(比如变量a)时不但可以直接针对a的这个事件使用
a.网警正在放看信息 += .....
的方式注册自己的事件处理方法,可以像任何字段、属性一样地随便改变它(重新赋值,而不仅仅是使用delegate的+=、-=方法)。但是如果你定一个event关键字,那么编译器就不允许别人胡乱使用它,而只能使用+=、-=两个方法来使用它。
MSDN中是这样描述事件的:
事件是特殊类型的多路广播委托,仅可从声明它们的类或结构(发行者类)中调用。如果其他类或结构订阅了该事件,则当发行者类引发该事件时,会调用其事件处理程序方法。
对于这一点,我们也可以从事件的定义中看出,不过就是在定义委托对象时加了event关键字表明这个委托现在叫事件。
-------------------------------
这应该比较权威了吧。