无涯教程-C# - 事件

101 阅读1分钟

事件(Event)是用户操作(如按键、单击、鼠标移动等)或某些事件(如系统生成的通知)。应用程序需要在事件发生时对其作出响应。事件用于进程间通信。

委托事件

事件是在类中声明和引发的,并使用同一类或某些其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。接受此事件的其他一些类称为订阅类,事件使用发布者-订阅者(publisher-subscriber)模型。

      发布者  -  是一个包含事件定义和委托的对象,事件-委托关联也定义在此对象中。

      订阅者  -  是接受事件并提供事件处理程序的对象。发布类中的委托调用订阅类的方法。

声明事件

若要在类中声明事件,首先必须声明事件的委托类型。如,

public delegate string MyDel(string str);

接下来,使用Event关键字-声明事件本身

event MyDel MyEvent;

上面的代码定义了一个名为BoilerLogHandler的委托和一个名为BoilerEventLog的事件,该事件在引发委托时调用该委托。

using System;

namespace SampleApp { public delegate string MyDel(string str);

class EventProgram { event MyDel MyEvent;

  </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">EventProgram</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="kwd">this</span><span class="pun">.</span><span class="typ">MyEvent</span><span class="pln"> </span><span class="pun">+=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MyDel</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="typ">WelcomeUser</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">WelcomeUser</span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> username</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"Welcome "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> username</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Main</span><span class="pun">(</span><span class="kwd">string</span><span class="pun">[]</span><span class="pln"> args</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     </span><span class="typ">EventProgram</span><span class="pln"> obj1 </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">EventProgram</span><span class="pun">();</span><span class="pln">
     </span><span class="kwd">string</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> obj1</span><span class="pun">.</span><span class="typ">MyEvent</span><span class="pun">(</span><span class="str">"Learnfk Point"</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">result</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

编译并执行上述代码时,将生成以下输出-

Welcome Learnfk Point

参考链接

www.learnfk.com/csharp/csha…