2010-03-04 47 views
2

我有一個後端類必須引發沒有參數的事件。 MethodInvoker具有所需的簽名,但它在後端類中使用它感覺有點奇怪,因爲它在System.Windows.Forms中定義。 .Net框架中的其他名稱空間中是否有另一個具有此簽名的委託?如果不是,你認爲我應該自己定義一個具有該簽名的委託或者使用MethodInvoker來代替?在後端類中使用MethodInvoker

回答

1

如果您使用的是.NET 2.0:
定義您自己的委託類型。在我看來,僅僅爲這種簡單類型引用程序集並不是好主意。

許多框架也這樣做。即使在mscorlib(2.0)中也可能有一些。但是,它們可能位於較深的命名空間中,這些命名空間的使用可能會與您的課程相結合,令人費解。

因此,在.NET 3.5之外使用您自己的代理類型。

1

如果您可以使用.NET 3.5,則可以使用Action委託。如果沒有,那麼你可以隨時聲明(+所需的任何其他ActionFunc代表)在Utils類或類似:

public delegate void Action(); 
public delegate void Action<T1, T2>(T1 arg0, T2 arg1); 

public delegate TResult Func<T1, TResult>(T1 arg0); 
public delegate TResult Func<T1, T2, TResult(T1 arg0, T2 arg1); 

等等

需要注意的是.NET 2已經包括void Action<T>(T arg)代表,但沒有任何其他人

+0

不幸的是,我使用的是.NET Framework 2.0。您對後端類中MethodInvoker的使用普遍認爲什麼? – Ikaso 2010-03-04 11:42:28

+3

我會在一個通用名稱空間中創建自己的.NET 3.5委託版本;這樣,當你這樣做的時候很容易轉換成3.5。而MethodInvoker是爲winforms跨線程調用而明確設計的;將其用作一般方法似乎在概念上是錯誤的。 – thecoop 2010-03-04 11:46:53

+0

@thecoop能否請你指點一下展示.Net 2解決方案的示例?謝謝 – Fandango68 2016-11-21 07:53:16