1、声明一个委托类 public delegate SomethingChangedHandler(object sender,EventArgs e);
2、在你的类中声明一个事件绑定到该委托 public event SomethingChangedHandler Changed;3、在相应的方法中触发此事件public void ChangeSomething(){ Changed(this,new EventArgs); //触发事件}4、在调用者订阅事件your class's instance.Changed+=new SomethingChangedHandler(你的方法名);5、取消订阅订阅该事件的对象.Changed-=new SomethingChangedHandler(你的方法名);注意:因为c#中事件是通过委托实现的,而委托不能被继承,所以导致事件只能在其定义的类中按事件名(该事件委托的参数...) 的形式触发。如果一个事件需要在派生类中被触发,可以在基类中定义一个触发该事件的方法 SendSomeEvent(),派生类中重写该方法,并调用base.SendSomeEvent();
看下面的实例:
namespace ConsoleApplication3
{ class 出版社 //定义出版社类 { public delegate void 出版(); //声明事件所需的代理 public event 出版 已经出版; //事件的声明 public void 发行() //触发事件的方法 { Console.WriteLine("发行刊物"); 已经出版(); } } class 订阅者 //定义订阅者类 { public void 订阅() { Console.WriteLine("订阅者已经订阅"); } } class Program {static void Main(string[] args)
{ 出版社 甲出版社=new 出版社(); 订阅者 张三=new 订阅者(); 甲出版社.已经出版+=new 出版社.出版(张三.订阅); //向事件发行者订阅一个元事件 甲出版社.发行(); //触发事件 } }}using System;
public class Publisher //出版社
{ public delegate void Publish(string name); //声明事件所需的代理public event Publish OnPublish; //事件的声明public void issue(string _name) //触发事件的方法{ if (OnPublish != null) { Console.WriteLine("发行刊物"); OnPublish(_name); }}}class Subscriber //订阅者
{ public void Receive(string str) //定义事件处理程序{ Console.WriteLine("订阅者" + str + "已经收到了刊物!");}}class story
{ static void Main(){ Publisher Pub = new Publisher(); Subscriber zs = new Subscriber(); Pub.OnPublish += new Publisher.Publish(zs.Receive); Pub.issue("张三"); //触发事件}}