C#事件總結與應用 什麼是事件? 事件是特殊化的委托,委托是事件的基礎,所以在介紹事件之前先介紹一下委托 通俗的說就是: 事件就是消息驅動器通過委托類來調用感興趣的方法,事實上事件調用是間接的調用 就像是顯示中我的代理人一樣 發佈者與訂閱者 在學習事件的時候們首先要明白什麼是發佈者什麼是訂閱者: 通 ...
C#事件總結與應用
什麼是事件?
事件是特殊化的委托,委托是事件的基礎,所以在介紹事件之前先介紹一下委托
通俗的說就是:
事件就是消息驅動器通過委托類來調用感興趣的方法,事實上事件調用是間接的調用 就像是顯示中我的代理人一樣
發佈者與訂閱者
在學習事件的時候們首先要明白什麼是發佈者什麼是訂閱者:
通知某件事情發生的,就是發佈者(例如我發佈了微博)
對某件事情關註的,就是訂閱者(例如我關註了微博)
事件觸發和註冊
事件發生時,會通知所有關註該事件的訂閱者(例如我發佈了新的微博)
想在事件發生時被通知,就必須註冊表示關註(例如我關註微博有了新的動態)
事件的聲明
事件的聲明首先要先定義一個委托類 ,因為事件的觸發就是調用一系列訂閱者註冊函數的過程 而委托本身就可以持有多個簽名返回值相同的函數
事件的聲明的關鍵字:event
筆者在這裡寫了一個關於學校上下課的事件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 事件
{
public delegate void EventHandler(int ringKind);//聲明一個帶參數的委托
public class ShoolRing //定義一個發佈者類
{
public event EventHandler OnBellSound;//委托發佈
public void Jow(int ringKind)//實現打鈴操作
{
if (ringKind == 1 || ringKind == 2)//判斷打鈴是否合法
{
Console.Write(ringKind == 1 ? "上課鈴響了," : "下課鈴響了 ,");
if (OnBellSound != null)//如果委托事件不等於空則回調委托所定義的方法
{
OnBellSound(ringKind);
}
}
else
{
Console.WriteLine(" 這個鈴聲參數不正確!");
}
}
}
public class Studens
{
public void ShowJow(int ringKind)//學生方法
{
if (ringKind == 1)
{
Console.WriteLine("同學們去上課!");
}
else if (ringKind == 2)
{
Console.WriteLine("同學們課間休息了!");
}
}
}
}
class Program
{
static void Main(string[] args)
{
ShoolRing shool = new ShoolRing();//實例化發佈者類
Studens stu = new Studens();//實例化訂閱者類
shool.OnBellSound += stu.ShowJow;//訂閱事件
shool.Jow(Convert.ToInt32(Console.ReadLine()));
Console.ReadLine();
}
}
}