Ivony在“关于Event与delegate的一些对比
”的评论中说“event就是delegate,只不过是delegate的缩减功能版,或者说受限版。。。。event去掉了delegate的直接赋值功能,其他与delegate一样。 也就是说event就是一个不能使用=运算符的delegate。”。C#事件(event)/Delegate一文中也说过“C#中的事件处理实际上是一种具有特殊签名的delegate”。
参考了一些资料,对event和delegate在程序中的运行还是不了解,本post仅仅是把自己在看书过程中书上的一些话摘了下来,并用它来套用dotnet里事件的运行过程,发出来希望让新手共同学习,高手来说点认识。
c#中创建事件的一般顺序:
1、创建和表示一个代表delegate,在定义事件时必须保证在使用even的时候已经存在一个代表。如果事件时预定义的,事件的客户只需要知道代表的名称即可。public delegate void EventHandlerDelegate();
2、创建一个包含以下内容的类:
a.事件处理代表,如:public event EventHandlerDelegate EventHandler。
b.一个可选的方法,用来检测又没有用event声明的代表实例,也就是上面所创建的代表。
c.调用事件处理代表的方法。
3、定义一个或多个把方法连接到事件的类,包括:
a.一个构造函数。构造函数的参数类型是包含事件声明的类。这个构造函数将把一个或多个方法与事件关联。
b.和事件关联的方法。
4、使用事件:
a.创建一个包含事件声明的类的对象。
b.使用所定义的构造函数创建一个包含事件定义的类的对象。
例子
由上面所说的这个例子,套用vs.net里Button的OnClick()事件生成过程(感觉思路还是不太明确,高手帮忙分析一下,谢过了……)
1、大概在System.EventHandler以及System.EventHandler的最终基类System.Delegate里吧(之所以用最终,实在是继承的层次太多了)
2、带事件的类(包含调用事件出来代表的方法)
public class System.Windows.Forms.Button
{
……
public event EventHandler Click;
}
3、vs里生成的cs文件里
this.button1.Click += new System.EventHandler(this.button1_Click);
private void button1_Click(object sender, System.EventArgs e)
{
}期望高手点睛……(呵呵)
参考了一些资料,对event和delegate在程序中的运行还是不了解,本post仅仅是把自己在看书过程中书上的一些话摘了下来,并用它来套用dotnet里事件的运行过程,发出来希望让新手共同学习,高手来说点认识。
c#中创建事件的一般顺序:
1、创建和表示一个代表delegate,在定义事件时必须保证在使用even的时候已经存在一个代表。如果事件时预定义的,事件的客户只需要知道代表的名称即可。public delegate void EventHandlerDelegate();
2、创建一个包含以下内容的类:
a.事件处理代表,如:public event EventHandlerDelegate EventHandler。
b.一个可选的方法,用来检测又没有用event声明的代表实例,也就是上面所创建的代表。
c.调用事件处理代表的方法。
3、定义一个或多个把方法连接到事件的类,包括:
a.一个构造函数。构造函数的参数类型是包含事件声明的类。这个构造函数将把一个或多个方法与事件关联。
b.和事件关联的方法。
4、使用事件:
a.创建一个包含事件声明的类的对象。
b.使用所定义的构造函数创建一个包含事件定义的类的对象。
![](/Images/OutliningIndicators/ContractedBlock.gif)
由上面所说的这个例子,套用vs.net里Button的OnClick()事件生成过程(感觉思路还是不太明确,高手帮忙分析一下,谢过了……)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)