【问题标题】:How do you pass a generic delegate argument to a method in .NET 2.0如何将通用委托参数传递给 .NET 2.0 中的方法
【发布时间】:2010-05-07 18:54:58
【问题描述】:

我有一个类的委托声明如下...

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 方法放在那个类中,然后我希望调用类设置委托参数,然后调用。是否有这样做的最佳实践。

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

郑重声明,我不能使用 .net35 中声明的任何新委托类型。

欢迎使用 C# 回答。

有什么想法吗?

赛斯

【问题讨论】:

    标签: c# .net vb.net delegates


    【解决方案1】:

    你需要给方法添加一个泛型类型参数:

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

    在 C# 中是这样的

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

    【讨论】:

    • 你也可以让整个类通用
    • @Joel:这违反了 FxCop 准则,并且会产生微妙和意想不到的后果。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多