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 //出版社www.2cto.com
{
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("張三"); //觸發事件
}
}