代码之家  ›  专栏  ›  技术社区  ›  Seth Spearman

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

  •  3
  • Seth Spearman  · 技术社区  · 14 年前

    我有一个带有委托声明的类,如下所示…

    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
    

    但是,我不想在方法调用中显式地键入getter委托。为什么我不能声明参数如下…

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

    有办法吗?

    我的最终目标是能够为被调用类中的属性setter和getter设置委托。但我的阅读表明你不能那样做。所以我把setter和getter方法放在那个类中,然后我希望调用类设置委托参数,然后调用。有没有这样做的最佳实践。

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

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

    欢迎回答C。

    有什么想法吗?

    塞思

    2 回复  |  直到 14 年前
        1
  •  7
  •   SLaks    14 年前

    需要向方法添加泛型类型参数:

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

    在c_中,那将是

    public static void MyMethod<TResult>(Getter<TResult> g) {
    
        2
  •  3
  •   Jeff Sternal    14 年前

    您可以使接受泛型委托本身的方法成为泛型:

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