2010-05-07 61 views
3

我有一類與委託聲明如下...如何傳遞一個泛型委託參數的方法在.NET 2.0

Public Class MyClass 
    Public Delegate Function Getter(Of TResult)() As TResult  

    ''#the following code works. 
    Public Shared Sub MyMethod(ByVal g As Getter(Of Boolean)) 
     ''#do stuff 
    End Sub 
End Class 

不過,我不想明確鍵入代表消氣在方法調用中。爲什麼我不能聲明參數如下...

... (ByVal g As Getter(Of TResult)) 

有沒有辦法做到這一點?

我的最終目標是能夠在被調用的類中設置屬性設置器和獲取器的委託。但是我的閱讀表明你不能那樣做。所以我把setter和getter方法放在那個類中,然後我想讓調用類設置委託參數,然後調用。是否有這樣做的最佳做法。

我知道在上面的例子中,我可以設置委託變量從調用類...但我想創建一個緊密封裝的單身。

爲了記錄,我不能使用任何在.net35中聲明的新委託類型。

歡迎在C#中的答案。

有什麼想法?

賽斯

回答

7

你需要一個泛型類型參數添加到方法:

Public Shared Sub MyMethod(Of TResult) (ByVal g As Getter(Of TResult)) 

在C#中,這將是

public static void MyMethod<TResult>(Getter<TResult> g) { 
+0

你也可以使整個類通用 – 2010-05-07 19:03:30

+2

@Joel:這違反了FxCop指導原則,並帶來了微妙和意想不到的後果。 – SLaks 2010-05-07 19:09:37

3

您可以接受的一般方法委託自己通用:

Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult)) 
    'do stuff 
End Sub 
相關問題