C 委託和事件

2021-07-06 07:29:31 字數 1752 閱讀 3413

說道委託,很多的教材上都說是類似於c語言上的指標,但是以我理解的程度來看,更像是複製這個方法或函式的使用,因為委託可以看成是乙個資料型別一樣的東西,傳遞進去的是函式或方法。但是這在我看來更像是植物大戰殭屍中的轉殖者,因為使用的方法和原來的函式沒有什麼兩樣,再者說就是可以少寫乙個物件名,另一方面說道委託就是程式委託給這個函式去完成某個事件,是乙個中間者的境地。(ps:從另一方面更像是資料庫中對錶或者方法的重新命名)

接下來讓我們來看一下委託的簡單實現:

由於委託是委託的方法,所以要先定義乙個方法:

public class mathopt

}

然後是定義委託 :

public delegate int mathoptdelegate(int value1,int value2);     //定義委託
(注意委託的關鍵字是delegate)

然後是使用:

static  void main(string args)

最後輸出的是3,由此證明了傳進委託物件的函式確實執行了物件obj的add方法。

(注意宣告委託的型別要和方法返回的值的型別一致)

多重委託:

多重委託實際上也是通過委託和委託之間的疊加來實現的,但是要求是引數必須相同而且返回值為空。多重委託最常用的兩個方法是combine()和remove(),實際使用的時候用"+、-"代替。

例子:

delegate void dg(string str);      //定義委託

class a //定義類

",str);

}public static void g(string str)

",str);

}}class myclass

}

執行結果:

invoke  delegate  a:

hello,a

invoke  delegate  b:

goodbye,b

invoke  delegate  c:

hello,c

goodbye,c

invoke  delegate  d:

goodbye,d

我們都知道在物件導向的程式設計中,訊息的傳遞有的時候是程式出發的根本,所以有些功能的執行就需要訊息去通知他們,在這裡我們用事件的觸發來傳遞訊息實現功能的執行。

事件的宣告格式(舉例);

public delegate void a;

public event a click;

其中event後面跟的必須是乙個委託,委託後面是執行事件。所以有事件必有委託。

事件的預定和撤銷:

事件需要預定才能被觸發,而已經預定了的事件也可以被撤銷,預定和撤銷的操作符分別是」+=「和」-=「。

使用:okbutton.click=new eventhandler(okbuttonclick);

有的時候感覺以前vb中用的控制代碼函式可能也是通過這種方式實現的。(eventhandler感覺有控制代碼的意思)

委託和事件在實際的應用上有很多的關聯,所以要放在一起學習,有很多巧妙的例子都是用事件寫成的。委託可以看作是c#中的指標,所以也需要重要的把控一下。

C 事件和委託

c 程式設計中的事件驅動是說應用程式的執行流程是由外界發生的事件確定的。也就是接受到任務再工作的模式。事件是乙個訊號,它告知應用程式有重要的事情發生。真正的執 況是,各個應用程式把負責不同功能的物件在其執行期間送入windows作業系統,讓這些物件等待windows產生事件。然後加以處理,windo...

C 委託和事件

什麼是委託?委託和事件這兩個概念是完全配合的。委託僅僅是函式指標,那就是說,它能夠引用函式,通過傳遞位址的機制完成。委託是乙個類,當你對它例項化時,要提供乙個引用函式,將其作為它建構函式的引數 先看示例 例中先申明乙個委託,例如 public delegate void somedelegate s...

C 委託和事件

要為類構造乙個事件,必須用 event 來宣告乙個 delegate 型的字段,如 puclic calss test 在建立類的例項後定義這個 load 事件 test m new test m.load new eventhandler m load void m load object sen...