簡體   English   中英

C# 向第 3 方委托簽名添加參數

[英]C# Adding arguments to a 3rd party delegate signature

我有一個帶有“void Method (string)”簽名的第 3 方委托。 問題是我想要/需要將額外的附加信息傳遞給 MySubscribedMethod(為了簡單起見,可以說 MyIntArg)。 我在訂閱時就知道這些信息,但我顯然不允許更改 MySubscribedMethod 參數列表。

ThirdPartyClass.ThirdPartyDelagate += MySubscribedMethod; // Want to provide MyIntArg
public void MySubscribedMethod(string Arg) {} // Would like to receive MyIntArg

有誰知道解決此類問題的優雅方法?

這就是閉包的設計目的:

int myIntArg = whatever;
ThirdPartyClass.ThirdPartyDelagate += s => MySubscribedMethod(s, myIntArg);

public void MySubscribedMethod(string Arg, int intArg) {}

C# 編譯器會神奇地為您創建所有必要的基礎結構,以確保在調用ThirdPartyDelegate時將myIntArg傳遞給MySubscribedMethod

(請注意,關於傳入的確切值有各種微妙之處,只有在您在循環中使用它或在分配委托后更改myIntArg時才真正重要;如果您對血腥細節感興趣,請參閱內容)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM