總結:event關鍵字的作用,用於不公開發布器中委托對象實例,對事件委托對象進行保護,禁止外部調用。
1、C#事件舉例說明
1 //事件及event關鍵字存在的意義 2 class Program 3 { 4 //事件,發布(publisher)-訂閱(subscriber)模型 5 static void Main(string[] args) 6 { 7 MouseLeftButton e = new MouseLeftButton(); /* 實例化對象,第一次沒有觸發事件 */ 8 subscribEvent v = new subscribEvent(); /* 實例化對象 */ 9 e.clickHandler += v.clickChromeBrowserIcon; /* 注冊 訂閱雙擊點擊瀏覽器圖標 */ 10 //e.OnDoubleClick(); 11 //e.clickHandler -= v.clickChromeBrowserIcon; 12 e.OnDoubleClick(); 13 e.clickHandler += v.clickWeChatIcon; 14 Console.WriteLine("我手速比較快,同時點擊了瀏覽器標簽和微信標簽"); 15 e.OnDoubleClick(); 16 17 } 18 } 19 20 21 //事件訂閱器類,提供事件處理程序的對象,就是事件發生了要做什么事情。 22 public class subscribEvent 23 { 24 //點擊谷歌瀏覽器圖標 25 public void clickChromeBrowserIcon() 26 { 27 Console.WriteLine("瀏覽器打開,我輸入了博客園網址打開了博客園網站首頁!"); 28 } 29 30 //點擊桌面微信圖標 31 public void clickWeChatIcon() 32 { 33 Console.WriteLine("微信客戶端打開,我登錄了我的微信!"); 34 } 35 } 36 37 //事件發布器類,用於發布事件,包含事件和委托定義的對象。 38 //定義MouseLeftButton類,模擬鼠標左鍵對象 39 public class MouseLeftButton 40 { 41 //聲明一個鼠標點擊委托 42 public delegate void ClickHandler(); 43 44 public event ClickHandler clickHandler; 45 46 public void OnDoubleClick() 47 { 48 if (clickHandler != null) 49 { 50 clickHandler(); /* 事件被觸發 */ 51 } 52 else 53 { 54 Console.WriteLine("無訂閱事件處理程序,未檢測到點擊相應按鈕,點擊無效!"); 55 } 56 } 57 58 public MouseLeftButton() { 59 OnDoubleClick(); 60 } 61 62 }
2、去掉event關鍵字不要,程序也能正常執行。但是,這是發布器類的委托失去了保護,可以觸發任何可能的操作。
1 //事件及even關鍵字存在的意義 2 class Program 3 { 4 //事件,發布(publisher)-訂閱(subscriber)模型 5 static void Main(string[] args) 6 { 7 MouseLeftButton e = new MouseLeftButton(); /* 實例化對象,第一次沒有觸發事件 */ 8 subscribEvent v = new subscribEvent(); /* 實例化對象 */ 9 e.clickHandler += v.clickChromeBrowserIcon; /* 注冊 訂閱雙擊點擊瀏覽器圖標 */ 10 e.clickHandler += v.clickWeChatIcon; 11 Console.WriteLine("我的電腦不受控制了,沒有點擊也打開了瀏覽器和微信!"); 12 e.clickHandler();//可以直接調用了委托 13 14 } 15 } 16 17 18 //事件訂閱器類,提供事件處理程序的對象,就是事件發生了要做什么事情。 19 public class subscribEvent 20 { 21 //點擊谷歌瀏覽器圖標 22 public void clickChromeBrowserIcon() 23 { 24 Console.WriteLine("瀏覽器打開,我輸入了博客園網址打開了博客園網站首頁!"); 25 } 26 27 //點擊桌面微信圖標 28 public void clickWeChatIcon() 29 { 30 Console.WriteLine("微信客戶端打開,我登錄了我的微信!"); 31 } 32 } 33 34 //事件發布器類,用於發布事件,包含事件和委托定義的對象。 35 //定義MouseLeftButton類,模擬鼠標左鍵對象 36 public class MouseLeftButton 37 { 38 //聲明一個鼠標點擊委托 39 public delegate void ClickHandler(); 40 41 public ClickHandler clickHandler; 42 43 public void OnDoubleClick() 44 { 45 if (clickHandler != null) 46 { 47 clickHandler(); /* 事件被觸發 */ 48 } 49 else 50 { 51 Console.WriteLine("無訂閱事件處理程序,未檢測到點擊相應按鈕,點擊無效!"); 52 } 53 } 54 55 public MouseLeftButton() { 56 OnDoubleClick(); 57 } 58 59 }
3、加上關鍵字event后,會發現以下錯誤