标签:Dele 定义 委托 C# setevent 理解 事件 方法
一、原理
1、事件是一种引用类型,实际上也是一种特殊的委托。
2、设定一个场景:当我肚子“咕咕”的叫了的时候,我知道我饿了,然后我就会起床、做饭、吃饭。这里“我饿了”就是一个事件,而“肚子咕咕叫”则触发了这个事件的发生(相当于一个“开关”),而我起床、做饭、吃饭就是这个事件被触发后要进行的一系列动作。
二、语法规则
1、事件的语法为:【访问修饰符 event 委托名 事件名】
2、由事件的语法可知,因为在定义事件的时候需要用到委托名,所以在定义事件之前需要先定义委托
3、一般事件的执行顺序就是:事件触发方法—(调用)—事件方法—(调用)—委托方法—(调用)—底层方法
注:这个底层方法是自己起的一个便于理解的名称,就是事件被触发后要进行的一系列动作。
三、代码示例
class Program { public delegate void Dele(); //定义一个委托类型 public event Dele setevent; //定义一个变量 //---------------------------------------------------------------------- public static void pullalarm() //定义三个底层方法 { Console.WriteLine("拉起警报"); } public static void ReinforceTheWall() { Console.WriteLine("加固城墙"); } public static void Updatesolider() { Console.WriteLine("升级士兵"); } //---------------------------------------------------------------------------- public void pushevent() { //定义一个事件触发方法 setevent(); //定义一个事件方法,这个方法名需要与事件名一致 } //----------------------------------------------------------------------------- static void Main(string[] args) { Program p = new Program(); //定义一个对象 //----------------------------------------------------------------------------- Dele del = pullalarm; //多播委托,将底层方法挂载到委托中 del += ReinforceTheWall; del += Updatesolider; p.setevent = del; //将委挂载到事件方法中 p.pushevent(); //调用事件触发方法 //---------------------------------------------------------------------------------- //下面是挂载的另一种写法 //p.setevent = new Dele(pullalarm);//将底层方法挂载到委托中并将委托挂载到事件中,这里的【new Dele(方法名)】相当于【del】,因为底层方法是静态方法 //p.setevent += new Dele(ReinforceTheWall); 类似于多播委托 //所以不需要对象调用 //p.pushevent(); //--------------------------------------------------------------------------- Console.ReadKey(); } }
1、代码编写顺序:
(1)定义委托(Dele)、事件(setevent)、定义底层方法(pullalarm、ReinforceTheWall、Updatesolider);
(2)定义事件触发方法(pushevent),在事件触发方法中定义事件方法( setevent())(事件方法需要与定义的事件名称相同);
(3)定义委托变量并将底层方法挂载到委托中( Dele del = pullalarm;),对于多个底层方法可以使用多播委托
(4)调用事件并将委托挂载到事件中
(5)调用事件触发方法
标签:Dele,定义,委托,C#,setevent,理解,事件,方法 来源: https://www.cnblogs.com/duoyaduoa/p/12600103.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。