簡體   English   中英

使用out參數處理委托

[英]Handling delegate with out parameter

我有一個委托和帶有out參數的事件:

公共委托void ExampleDelegate(對象發送者,EventArgs e,輸出字符串值);

公共事件ExampleDelegate示例;

當我嘗試處理事件時:

 mg.Example += (sender, e, val) =>
 {
    //do stuff
 };

我收到錯誤消息參數3必須用'out'關鍵字聲明

當我像這樣拋出建議的關鍵字時:

 mg.Example += (sender, e, out val) =>
 {
    //do stuff
 };

我得到和額外的錯誤,找不到名稱空間名稱'val'的類型..etc

我究竟做錯了什么?

好了,因為它清楚地說, 在這里 ,你需要指定的類型val

(sender, e, out string val)=> ...

您的事件處理程序未遵循.net指南。

如果必須那樣使用它,請使用委托而不是事件。

如果您有兩個事件處理程序修改out參數,則會遇到麻煩。

參考: 事件教程

.NET Framework准則

盡管C#語言允許事件使用任何委托類型,但是.NET Framework對於應用於事件的委托類型有一些更嚴格的准則。 如果您打算將組件與.NET Framework一起使用,則可能需要遵循這些准則。

.NET Framework指南指出,用於事件的委托類型應采用兩個參數,一個“對象源”參數指示該事件的源,一個“ e”參數封裝有關該事件的任何其他信息。 參數“ e”的類型應從EventArgs類派生。 對於不使用任何其他信息的事件,.NET Framework已經定義了適當的委托類型:EventHandler。

zmbq已經為您提供了糾正錯誤的答案。

我添加這個只是為了完整性。

暫無
暫無

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

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