最近一直在研究委托與事件,下麵是我的個人理解 NOTE:參考了張子陽的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 1.事件要有委托,參數,事件 2.委托可以自己定義:public delega ...
最近一直在研究委托與事件,下麵是我的個人理解
- NOTE:參考了張子陽的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
- 1.事件要有委托,參數,事件
- 2.委托可以自己定義:public delegate void Boli(object sender,BoliEventAgrs e);
- 也可以利用EventHandler進行操作,本次使用的是此方法:
- 前提要聲明參數(BoliEventAgrs),此類繼承EventArgs而且是必須的;
1 class BoliEventAgrs : EventArgs//繼承系統事件參數介面 2 { 3 public readonly int tem; 4 public BoliEventAgrs(int tem) 5 { 6 this.tem = tem; 7 } 8 }
- public event EventHandler<BoliEventAgrs> BoliWaterEvent;
- EventHandler是系統自己的帶參委托定義為: public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
- BoliEventAgrs為委托參數,也是事件需要的參數;
- BoliWaterEvent為事件名字;
- 3.委托,參數,事件都有啦,下麵就是寫具體方法了,就是你的事件是什麼事件,需要幹啥的,
- 兩步走,訂閱也就是註冊事件,執行觸發事件的方法
//註冊 boli.BoliWaterEvent += boli1.Alarm; boli.BoliWaterEvent += boli1.Alarm1;
//執行
boli.Boliwater();
4。效果
5.下麵是完整代碼
using System;
namespace DelegateEventObserver
{
class Program
{
static void Main(string[] args)
{
a boli = new a();
b boli1 = new b();
boli.BoliWaterEvent += boli1.Alarm;
boli.BoliWaterEvent += boli1.Alarm1;
boli.Boliwater();
Console.ReadKey();
}
}
class BoliEventAgrs : EventArgs//繼承系統事件參數介面
{
public readonly int tem;
public BoliEventAgrs(int tem)
{
this.tem = tem;
}
}
class a
{
//public delegate void Boli(object sender,BoliEventAgrs e);
public event EventHandler<BoliEventAgrs> BoliWaterEvent;//BoliEventAgrs 為委托參數
public void Boliwater()
{
for (int i=0; i<100;i++)
{
if (i>90)
{
BoliEventAgrs e = new BoliEventAgrs(i);
if (BoliWaterEvent != null)
{
BoliWaterEvent(this, e);
}
}
}
}
}
/// <summary>
/// 委托方法,事件註冊方法,參數e為 控制溫度
/// </summary>
class b
{
public void Alarm(object sender,BoliEventAgrs e)
{
if (e.tem>95)
{
Console.WriteLine("水溫{0}",e.tem);
}
}
public void Alarm1(object sender, BoliEventAgrs e)
{
if (e.tem >98)
{
Console.WriteLine("水溫{0},馬上開啦", e.tem);
}
}
}
}