C# .Net 委托和事件的區別


在.net中,事件是一種特殊的委托,那他到底特殊在哪,換句話說,加上event關鍵字到底有什么用,我理解主要有兩方面,下面用實例說明:

 

   一 、事件只能在本類型內部“觸發”,委托不管在本類型內部還是外部都可以“調用”。


   舉個例子,按鈕的Click事件只有在鼠標點擊按鈕才能觸發,沒有例外;但如果Click是委托的話,我可以通過代碼直接調用這個委托,就可以使得Click事件中的代碼執行,這不合規矩。看例子:

 

   //定義一個委托

   Public delegate void testEventHandler(object sender,EventArgs e); 

      

   Public Class Class1

   {

         //定義一個事件

         public testEventHandler CheckDiff;

 

         public Class1()

         {

                CheckDiff+=new testEventHandler(test1);

         }

 

         Public void test1(object o,EventArgs e)

         {

                 MessageBox.Show("I am A");

         }

   }

 

   Class1 c=new Class1();

   c.diff(this,new EventArgs());

 

   這時,我們在類的外部調用他是沒有問題的。可以得到結果。但如果我們在定義的時候使用event關鍵字,如下

 

   public event testEventHandler CheckDiff;

 

   則不能通過編譯,提示“CheckDiff只能出現在+=或-=左邊(Class1中使用時除外)”,也就是說我們在類的外部只能添加和刪除注冊,但不呢功能使用這個事件了,提示中的“除外”指什么,就是在類的內部是可以調用這個事件的,在構造函數中可以調用下試試結果是沒有問題的,例子如下:

     public Class1()

     {

           CheckDiff+=new testEventHandler(test1);

           CheckDiff(this,new EventArgs());

     }

     

 

    二、在類的外部,事件只能用“+=”和“-=”去訂閱/取消訂閱,如果是委托的話還可以使用“=”。

 

    首先去掉將事件定義的event去掉,讓他變成委托,然后在調用Class1的地方使用“=”綁定委托的方法。

    Class1 c=new Class1();

    c.CheckDiff=new testEventHandler(c.test1);

    這樣是沒有問題的。但增加了event關鍵字后,想要增加和取消訂閱只能使用“+=”和“-=”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM