2012-07-17 78 views
2

處理委託我有一個委託和事件與一個輸出參數:與輸出參數

公衆委託無效ExampleDelegate(對象發件人,EventArgs的,出字符串值);

公共事件ExampleDelegate示例;

當我試圖對事件進行處理:

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

,我發現了錯誤參數3必須聲明與「出」關鍵字

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

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

我得到和額外的錯誤命名空間名稱'val'的類型無法找到..等等

我在做什麼錯?

+4

你打破了事件處理程序的設計。改爲創建自己的EventArgs類。 – 2012-07-17 12:33:50

+1

@AmiramKorach您的答案是我正在尋找的答案 – 2012-07-17 13:24:04

回答

2

事件處理程序沒有確認到.NET的準則。

如果您必須像這樣使用它,請使用委託而不是事件。

如果你有兩個事件處理程序修改你的輸出參數,你會遇到麻煩。

參見:Events Tutorial

.NET框架準則

雖然C#語言允許事件使用任何委託類型, .NET框架對委託類型 應該是一些嚴格的指導方針用於事件。如果您打算將組件與.NET Framework一起使用 ,則可能需要遵循這些 準則。

.NET框架準則指出,用於 委託類型的事件應採取兩個參數,一個「對象源」參數 指示事件的源,和一個「e」參數 封裝的任何附加信息關於事件。 「e」參數的類型應該從EventArgs類派生。對於不使用任何附加信息的事件 ,.NET Framework 已經定義了適當的委託類型:EventHandler。

zmbq已經爲您提供瞭如何糾正錯誤的答案。

我加入這只是爲了完整性。

+0

謝謝,感謝 – 2012-07-17 13:07:23

4

好,因爲它清楚地說:here,你需要指定val類型:

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

關於您鏈接到的答案的說明表示您需要指定* all *參數的類型。 – 2012-07-17 12:42:39

+0

似乎這樣做。 – 2012-07-17 13:06:28