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

如何在.NET 2.0中将委托分配给委托

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

    我只要回答就行了 how to pass a generic delegate as a parameter . 谢谢你的帮助。现在我需要知道如何将委托分配给另一个委托声明方。能做到吗?

    Public Class MyClass  
        Public Delegate Function Getter(Of TResult)() As TResult    
    
        ''#the following code works.
        Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult))
            ''# I want to assign Getter = g  ''#how do you do it.
        End Sub
    End Class
    

    注意getter现在是私有的。如何分配getter=g

    当我尝试getter=g'时,得到的类型参数太少,编译错误。 当我尝试getter(of tresult)=g'时,getter是一个类型,不能用作表达式。

    你是怎么做到的?

    塞思

    2 回复  |  直到 14 年前
        1
  •  1
  •   Joel Coehoorn    14 年前

    你还不能。您的getter(of tresult)()委托不是可以为其分配内容的变量。它更像是一个类定义。因此,首先还需要声明一个可以使用的委托变量:

    Public Class MyClass  
        Public Delegate Function Getter(Of TResult)() As TResult    
    
        Private MyGetter As Getter(Of TResult)
    
        Public Shared Sub MyMethod(Of TResult)(ByVal g As Getter(Of TResult))
            MyGetter = g  
        End Sub
    End Class
    

    请注意,泛型类型仍然存在问题,因为为mymethod(属于tresult)声明的泛型类型未连接到我刚才在此处添加的委托变量的类型。您必须使整个类成为通用类,而不仅仅是使其工作的方法。

    我还想知道为什么你不使用现有的 Func(Of T) 代表?

        2
  •  2
  •   Tomas Petricek    14 年前

    我不太确定你想做什么-在你的代码中, Getter 是类型(委托类型)的名称,而不是可以为其分配某些内容的类的实例字段。

    您是否打算声明一个事件(其他用户可以将处理程序注册到该事件)?如果是这样,请参见 this article 在MSDN上。