c 委託和事件再理解

2021-06-27 10:50:06 字數 2144 閱讀 9652

委託:

c# 中的委託類似於 c 或 c++ 中的函式指標。使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與 c 或 c++ 中的函式指標不同,委託是物件導向、型別安全的,並且是安全的。

委託宣告定義一種型別,它用一組特定的引數以及返回型別封裝方法。對於靜態方法,委託物件封裝要呼叫的方法。對於例項方法,委託物件同時封裝乙個例項和該例項上的乙個方法。如果您有乙個委託物件和一組適當的引數,則可以用這些引數呼叫該委託。

委託的乙個有趣且有用的屬性是,它不知道或不關心自己引用的物件的類。任何物件都可以;只是方法的引數型別和返回型別必須與委託的引數型別和返回型別相匹配。這使得委託完全適合「匿名」呼叫。

簡單例子如下:

class buyticket

public static void buymovieticket()

}class program

}以上是乙個純委託的例子。

委託和事件:

事件程式設計可以分成兩部分類:事件發生的類(發布者)和事件接收處理的類(訂閱者)。事件發生的類就是說在這個類中觸發了乙個事件,但這個類並不知道哪個物件或方法將會接收到並處理它觸發的事件。所需要的是在傳送方和接收方之間存在乙個媒介。這個媒介在.net framework中就是委託(delegate)。在事件接收處理的類中,我們需要有乙個處理事件的方法。

例項一展示了事件和委託實現雜誌發布和訂閱的過程。只有有訂閱者訂閱的時候(如果有物件註冊),才能呼叫發布者發布的事件。訂閱者類中方法要和委託有著相同的返回值和相同的引數。

例項一如下:

//所有訂閱者感興趣的物件,也就是e,都要繼承微軟的eventargs

public class pubeventargs:eventargs

public pubeventargs(string magazinename)

}//發布者

public class publisher

}public void issue(string magazinename)

}//訂閱者

public class subscriber1

}public class subscriber2

}class program

console.readkey();}}

執行結果:

其中,public delegate void publisheventhandler(object sender, pubeventargs e);//定義**,返回值為void,引數為sender物件和訂閱者感興趣的物件類pubevent,這個類需要繼承eventargs類,如果沒有需要傳的引數,則可以直接為eventargs。

public event publisheventhandler publish;//定義**的事件publish

pub.publish += new publisher.publisheventhandler(subscriber1.recv1);

和pub.publish += subscriber2.recv2;是事件呼叫的兩種不同的方法。

事件呼叫必須為+= 或者-=。

例項二,相似的例子:

當溫度大於90,並且有物件註冊的時候,觸發事件。並且提示顯示資訊和報警。

//溫度類

public class heart}}

}//顯示類

public class displayer

",temperature);}}

//警報類

public class alarmer

", temperature);}}

class program

}執行結果:

參考文件

1、《c#中的委託和事件》

2、《大白話系列之c#委託和事件講解》

委託和事件再探索

一直以為張子陽是位功力深厚的長者,今天才知道他比 我大一歲!功力深厚也就罷了,還長得那麼帥!汗顏!張老師 在技術上不分輩分 的文章我一直關注,由淺及深,能跟著學不少東西非常棒!我看技術從來不做筆記的,以為自己腦子好使,最近 發現老是忘事,看來到了該做筆記的年齡了!具體的關於c 中的委託和事件我就不再...

C 委託和事件的理解

委託 private delegate string getastring 委託的定義,使用delegate關鍵字 兩種指向方法的寫法 getastring a new getastring x.tostring a指向了x中的tostring方法 getastring a x.tostring 兩...

如何理解c 委託和事件

有很多同學在學習c 的委託和事件時,都一頭霧水,有的不理解委託和事件到底是什麼東西,有的理解了概念,但不知道在什麼場景中應該應用委託和事件,今天我們就一起總結下委託和事件的知識點 委託 我們先從字面上理解委託,就是將事情託付給別人做,而非自己親自做,自己只負責通知。巨集觀上來看,委託就是一種通知機制...