簡單理解委託、事件以及小Demo
阿新 • • 發佈:2018-12-20
對於委託和事件的理解只是停留在表層,來記錄下學習過程
委託(Delegate) 是存有對某個方法的引用的一種引用型別變數。引用可在執行時被改變。
事件(Event) 基本上說是一個使用者操作,如按鍵、點選、滑鼠移動等等,或者是一些出現,如系統生成的通知。應用程式需要在事件發生時響應事件。例如,中斷。事件是用於程序間通訊。
事件在類中宣告且生成,且通過使用同一個類或其他類中的委託與事件處理程式關聯。
所以說事件的使用需要依託委託來實現
事件是釋出-訂閱模型的,所謂釋出器,就是包含有委託和事件的那個類,訂閱器就是接受該事件的類(按照我目前的理解來講,就是委託所指向的方法的那個類,因為事件是需要利用委託來建立,而實現委託就需要實現與委託相同引數、返回值的方法)
demo
/*釋出器*/ class TestEvent_Publishier { //委託建立 public delegate void BoilHandler(string message); //事件建立 public event BoilHandler BoilEvent; //用來觸發事件的方法 protected virtual void GoBoilEvent(string message) { if(BoilEvent !=null) { BoilEvent(message); } else { Console.WriteLine("Please check!"); Console.ReadLine(); } } public TestEvent_Publishier() { Trigger(5); } //觸發方法需要觸發的條件 public void Trigger(int temperature) { if(temperature>50&&temperature<100) { GoBoilEvent("temp too high!"); } if (temperature < 50 || temperature > 100) { GoBoilEvent("temp error!"); } } }
/*訂閱器*/
class Subscriber
{
public void print(string message)
{
Console.WriteLine(message);
Console.ReadLine();
}
}
/*觸發*/ class Program { static void Main(string[] args) { //例項化釋出器類 TestEvent_Publishier t = new TestEvent_Publishier(); //例項化訂閱器類 Subscriber s = new Subscriber(); //先建立事件 t.BoilEvent += new TestEvent_Publishier.BoilHandler(s.print); t.Trigger(60); t.Trigger(20); t.Trigger(20); t.Trigger(20); t.Trigger(20); } }