如何将泛型委托参数传递给.NET 2.0中的方法

Set*_*man 3 .net c# vb.net delegates

我有一个带有委托声明的课程如下......

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
Run Code Online (Sandbox Code Playgroud)

但是,我不想在Method调用中显式键入Getter委托.为什么我不能将参数声明如下......

... (ByVal g As Getter(Of TResult))
Run Code Online (Sandbox Code Playgroud)

有办法吗?

我的最终目标是能够在被调用的类中为属性设置器和getter设置委托.但我的阅读表明你不能这样做.所以我在该类中放置了setter和getter方法,然后我希望调用类设置委托参数然后调用.这样做有最好的做法吗?

我在上面的例子中意识到我可以设置从调用类设置委托变量...但我试图创建一个紧密封装的单例.

为了记录,我不能使用.net35中声明的任何新委托类型.

欢迎使用C#中的答案.

有什么想法吗?

赛斯

SLa*_*aks 7

您需要在方法中添加泛型类型参数:

Public Shared Sub MyMethod(Of TResult) (ByVal g As Getter(Of TResult))
Run Code Online (Sandbox Code Playgroud)

在C#中,那就是

public static void MyMethod<TResult>(Getter<TResult> g) {
Run Code Online (Sandbox Code Playgroud)

  • @Joel:这违反了FxCop指南,并产生了微妙和意想不到的后果. (2认同)