星空网 > 软件开发 > ASP.net

c#之委托和事件的区别

下面开始对事件进行介绍

1、定义事件以及事件的编译原理

首先定义事件对应的委托:

1 public delegate void ThreeClickEventDel();

 

然后对应事件变量:(其实就是在委托前面加一个event)

public event ThreeClickEventDel ThreeClickEvent;

 

反编译之后:是:一个“私有委托”和两个“公有”的“add”和“remover”方法

1)因为是私有委托:所以只有类的内部可以调用,在类外部就不能被调用。创建的类的实例也是不能调用的。所以事件是安全的。

                           因为私有,所以不能使用 “=”对事件进行赋值

2)因为有 “公有” 的add 和 remove,,所以 类的实例 可以对事件 进行 “+=”和“-=”对事件进行 添加 事件和 删除事件(所以在类的外部可以对事件进行赋值,但是不能调用)

 

2、委托和事件的区别:

1、委托时数据类型,但是 事件 是数据类型的变量(并且是私有委托)

2、委托可以在类的外部被调用,但是事件不能再类的外部,通过类的实例进行调用(因为是私有委托)

3、委托可以通过“=”、“+=”、“-=”进行赋值,但是事件只能通过“+=”和“-=”对事件进行赋值。(因为事件是私有委托)

 

3、委托也能注册事件,为什么会衍生出事件呢?

 委托注册事件:

c#之委托和事件的区别
 1   //定义一个委托 2   public delegate void JingGaoDel(); 3   class Program 4   { 5     static void Main(string[] args) 6     { 7       GuoluFang Guolu = new GuoluFang(); 8       //为 委托注册 事件 9       Guolu.jingGao = delegate()10       {11         Console.WriteLine("水已经烧开了!");12       };13       for (int i = 0; i <100; i++)14       {15         Guolu.ShaoShui();16       }17       Console.ReadKey();18     }19   }
c#之委托和事件的区别

 

为什么衍生事件:

1、因为事件只能通过“+=”和“-=”进行赋值,所以可以避免像委托那样(可能用“=”赋值将原有的事件冲掉)。

2、事件虽然是public 定义的,但是会编译成“私有的委托”,所以事件只能在类的内部被调用,类的实例不能被调用。

 

4、使用事件的练习(窥探微软 的事件)

 创建验证控件:

添加一个UserControl控件,设计如下:

c#之委托和事件的区别

写后台代码:

c#之委托和事件的区别 控件后台代码

 

主窗体添加验证控件:

c#之委托和事件的区别

后台代码:

c#之委托和事件的区别
 1     private void Form1_Load(object sender, EventArgs e) 2     { 3       //注册事件 4       userVilidateControl1.UserViliDating += new UserVilidateDel(userVilidateControl1_UserViliDating); 5     } 6 7     //创建对应方法事件 8     void userVilidateControl1_UserViliDating(object sender, MyEventArgs e) 9     {10       if (e.UserName == "admin" && e.Pwd == "123")11       {12         e.IsSuccess = true;13       }14     }
c#之委托和事件的区别

 




原标题:c#之委托和事件的区别

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

美国fba中国:https://www.goluckyvip.com/tag/38115.html
美国fba中转:https://www.goluckyvip.com/tag/38116.html
美国fba专线:https://www.goluckyvip.com/tag/38117.html
美国fba专线海运:https://www.goluckyvip.com/tag/38118.html
美国fba专线货代:https://www.goluckyvip.com/tag/38119.html
美国fba专线物流:https://www.goluckyvip.com/tag/38120.html
深圳玉龙公园簕杜鹃花海花期时间+门票+交通:https://www.vstour.cn/a/365174.html
出境旅游预订须知:https://www.vstour.cn/a/365175.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流