程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C# 事件與委托的區別

C# 事件與委托的區別

編輯:C#基礎知識

C# 事件與委托的區別

先看一段程序

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Test obj = new Test();
  6. obj.print += printout1; //綁定printout1方法
  7. obj.print += printout2; //綁定printout2方法
  8. obj.start();
  9. }
  10. static void printout1()
  11. {
  12. Console.WriteLine("輸出第一段字符串");
  13. }
  14. static void printout2()
  15. {
  16. Console.WriteLine("輸出第二段字符串");
  17. }
  18. }
  19. public delegate void Print(); //創建委托
  20. class Test
  21. {
  22. public event Print print; //創建事件實例
  23. public void start()
  24. {
  25. print(); //觸發事件
  26. }
  27. }

上面的代碼使用的是標准的事件委托格式,現在我將其中的event關鍵字去掉,你會發現程序依然可以正常的運行,不會出現任何的問題。

事件實際上是一個特殊的委托實例,不用事件也沒有關系。實際上事件只是削弱了委托的功能,event在編譯器角度保護了你程序的安全,因為你只能使用+=-= 來注冊事件了,而不能使用 = 為事件關聯方法。(在委托中還可以使用=來綁定方法,不過=是一種破壞性代碼,不管之前是否已經綁定的有方法了,他都會將其清除)

例子:將上面的代碼為事件綁定方法的部分中的 += 換成 = 編譯器就會報錯

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Test obj = new Test();
  6. obj.print = printout1; //綁定printout1方法時出錯
  7. obj.start(); //事件不能使用等號運算符綁定方法
  8. }
  9. static void printout1()
  10. {
  11. Console.WriteLine("輸出第一段字符串");
  12. }
  13. }
  14. public delegate void Print(); //創建委托
  15. class Test
  16. {
  17. public event Print print; //創建事件實例
  18. public void start()
  19. {
  20. print(); //觸發事件
  21. }
  22. }
錯誤提示
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved