C 中委託和事件

2021-08-22 04:31:52 字數 2008 閱讀 4238

當我們在窗體下定義變數後,是不是可以輕而易舉在此窗體使用這個變數呢?那麼如果跨窗體引用呢?其實也簡單,普遍操作,定義乙個全域性變數,但是這樣操作不規範,取而代之的是應該在某個窗體定義乙個類,然後在類中宣告乙個靜態變數,此時跨窗體使用的時候直接使用classname.staticname;既然變數可以這麼操作,那麼我如果想方法同樣也可以進行這樣的操作呢;

結果是.....,不能,指定沒有這種操作,那麼委託+事件又是弄啥來?當然是逆天操作解決問題的,也就是上面結尾的問題;

首先如果是在本窗體的話,和變數無恙,直接呼叫此方法即可;那麼跨窗體引用呢,例項化包含此方法的窗體,然後呼叫它的方法,好像挺不錯的,畢竟差點和「層級架構」之間傳值一樣了,不過我們要區分,架構之間歸為類與類之間,但是這裡可是窗體與窗體之間,耦合性大大增強;

那麼如果就想窗體之間呼叫方法呢?這可咋辦,委託此時便應運而出,輕鬆解決這個「兩個窗體耦合」的問題;

a窗體預先定義委託,在b窗體中(例項化a窗體,然後委託b窗體的方法),一旦在a窗體中呼叫委託的時候,進而把b窗體的方法也觸發了;

(1)//在乙個新建的類裡面宣告乙個委託型別

public delegate void testdelegate();

(2)//在form4窗體例項化testdelegate這個委託

public testdelegate mytest;

(3)//在form3窗體中例項化form4窗體,然後委託form3窗體的方法

private void settext()//form3中的方法

private void button2_click(object sender, eventargs e)//form3中的方法

(2)//在form4窗體例項化testdelegate這個委託

public event testdelegate mytest;

(3)//那麼此時我們需要在委託前面用event型別修飾,將委託物件變為事件

private void button2_click(object sender, eventargs e)//form3中的方法

(4)//但是這樣的話,為了生命乙個委託還需要新建乙個類,好像挺麻煩的,.net平台內建了兩個委託

public actionmytest2;//無返回值,並且只有乙個引數的委託

public funcmytest3;//前面t都是引數,最後乙個t是返回值的型別

例項化物件

class strname=new class();

委託例項化「委託物件」(預先定義委託)

public testdelegate mytest3;

委託物件

事件public event testdelegate mytest;

多用於處理資訊同步(後台資料庫),非窗體介面,同時解決耦合性問題;

1:如果把委託宣告為private的話,外界不可以被賦值(方法),更不會在外界被呼叫;那麼此時好像委託在自己窗體無任何作用;

2:那麼如果宣告為public的話,外界可以委託方法,但是引來的問題就是外界同樣可以呼叫其他窗體宣告的委託;安全性降低。

3:委託同樣也可以進行「=」賦值或者「+=」賦值,因此同樣容易誤操作;

那麼?就此結束了,不不不不不,「事件」這個名詞出現在我們面前;

解決了委託中的不安全性和誤操作兩項缺點,我想這就夠了,這兩條理由足以說服我用它;並且也不會很麻煩,在原有委託的基礎上,新增「型別」event後,那麼此時就可以使用了;

但是在使用的過程中,我們需要單獨宣告乙個類來宣告乙個委託型別,方便使用的時候例項化委託物件;此時好像又有些沒必要,不用怕!.net平台內建已經為咱封裝好了兩個委託,考慮的甚是周全,解決單獨新建乙個類來宣告委託;

action無返回值,但是有引數,t表示傳的引數

func有返回值委託,第乙個表示返回值,剩餘的表示引數;

這樣的話,我們遇到問題的時候不就想到使用事件了嗎?何樂而不為呢?哈哈

C 中委託與事件

c 為了型別安全,預設並不支援指標。而是採用委託的方式。委託的宣告 屬性 修飾符 delegate 返回型別 委託型別名 引數列表 其中返回型別和引數列表共同決定了委託型別能關聯的一組方法 public delegate int tdelegate int a,int b 宣告委託 在類classd...

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。通過委託執行方法 class program public class examplevoid print str...

C 中委託和事件的區別

大致來說,委託是乙個類,該類內部維護著乙個字段,指向乙個方法。事件可以被看作乙個委託型別的變數,通過事件註冊 取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。class program public class example void print string str ...