zoukankan      html  css  js  c++  java
  • c#中的委托是什么,事件是不是一种委托

    委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
     给你举个例子:
     //声明一个委托,这里的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){}
     如你所见,这是一个很典型的委托调用。 
  • 相关阅读:
    由一个表更新另一个表中field
    DevExpress控件XtraGrid显示问题,分组不好用
    20090522: IBM X22
    DevExpress的GridControl选择一行,不显示单元格焦点的设置
    DataTable添加行的方法
    DevExpress自定义XtraGrid列菜单
    一道面试题
    DevExpress 设置LookUpEdit的值
    解决端口占用问题
    NoSQL
  • 原文地址:https://www.cnblogs.com/275147378abc/p/4513054.html
Copyright © 2011-2022 走看看