事件 Event
- 事件是委托的一個(gè)實(shí)例呜达。
- 事件是一個(gè)操作,應(yīng)用程序需要在事件發(fā)生時(shí)響應(yīng)事件粟耻。例如查近,中斷眉踱。事件是用于進(jìn)程間通信。
- 事件需要在類中聲明霜威。
- 只需要將要做到事情方法 綁定到事件中即可一起完成所有事件谈喳。
聲明一個(gè)事件
- 事件的聲明依賴于委托
public delegate void DoSomeThing(int a); //一個(gè)委托
class MyEvent
{
//事件:就是委托的一個(gè)變量 加上關(guān)鍵字Event修飾 如下是一個(gè)事件
public event DoSomeThing DoSomeThingHandleEvent;
}
到此我們已經(jīng)聲明了一個(gè) DoSomeThingHandleEvent 事件。
事件的使用
- 為事件綁定方法
public delegate void DoSomeThing(int a); //一個(gè)委托
class MyEvent
{
//事件:就是委托的一個(gè)變量 加上關(guān)鍵字Event修飾 如下是一個(gè)事件
public event DoSomeThing DoSomeThingHandleEvent;
public void InvokeStartEvent()
{
Console.WriteLine("---------------------InvokeEvent-----");
if (DoSomeThingHandleEvent != null) //判斷這個(gè)事件是否為空 不為空則啟動(dòng)事件
{
DoSomeThingHandleEvent.Invoke(5); //執(zhí)行者 啟動(dòng)戈泼,一般通過(guò)Invoke啟動(dòng)
//DoSomeThingHandleEvent(5); //也可以這樣啟動(dòng)
}
}
}
class Program
{
static void Main(string[] args)
{
MyEvent myevent = new MyEvent();
myevent.DoSomeThingHandleEvent += new DoSomeThing(ShowSomeThing); // 注冊(cè)事件
myevent.DoSomeThingHandleEvent += ShowSomeThing; //簡(jiǎn)化 注冊(cè)事件
myevent.InvokeStartEvent(); //調(diào)用了
}
static void ShowSomeThing(int a)
{
Console.WriteLine("showSomething" + a);
}
}
實(shí)際使用一個(gè)事件
- 熱水器提醒事例:
public delegate void WaterHeaterDelegate(int Temperature);
class WaterHeater
{
public event WaterHeaterDelegate WaterDele;
public void Shaoshui() //開(kāi)始事件
{
for (int i = 0; i <= 100; i++)
{
if (i>95)
{
WaterDele.Invoke(i); //調(diào)用啟動(dòng)事件
}
}
}
public void WaterHot(int temperature) //水溫提示
{
Console.WriteLine("水已經(jīng)有{0}C了", temperature);
}
public void WaterBoiling(int temperature) //水燒開(kāi)
{
Console.WriteLine("水已經(jīng)燒開(kāi)了"+ temperature);
}
}
class Program
{
static void Main(string[] args)
{
//方法一:綁定外部類中的方法
WaterHeater water = new WaterHeater(); //熱水器實(shí)例化對(duì)象
water.WaterDele += new WaterHeaterDelegate(water.WaterHot); //綁定事件
water.WaterDele += new WaterHeaterDelegate(water.WaterBoiling); //綁定事件
//water.WaterDele += (new WaterHeater()).WaterHot;//綁定事件的 另一種形式
water.Shaoshui();
//方法二:綁定內(nèi)部類中的方法
//water.WaterDele += Water_WaterDele;
//water.WaterDele += Water_WaterDele1;
//water.Shaoshui();
}
private static void Water_WaterDele1(int Temperature)
{
Console.WriteLine("水已經(jīng)燒開(kāi)了" + Temperature);
}
private static void Water_WaterDele(int Temperature)
{
if (Temperature==100)
{
Console.WriteLine("水已經(jīng)有{0}C了", Temperature);
}
}
}