天性懒惰

Give me a try, believe that I can fly!--集歧步以千里,聚沙以成塔。偷懒的最高境界就是更加努力的工作!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
      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)
    
{
        
    }
期望高手点睛……(呵呵)
posted on 2006-04-29 00:30  Wigruky  阅读(462)  评论(0编辑  收藏  举报