【问题标题】:How do you do an assignment of a delegate to a delegate in .NET 2.0如何在 .NET 2.0 中将委托分配给委托
【发布时间】:2010-05-07 20:51:40
【问题描述】:

我只是在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 是一种类型,不能用作表达式。

你是怎么做到的?

赛斯

【问题讨论】:

    标签: c# vb.net .net-2.0 delegates


    【解决方案1】:

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

    您是否打算声明一个事件(其他用户可以注册处理程序)?如果是这种情况,请参阅例如 MSDN 上的 this article

    【讨论】:

    • 我已经简化了一点。对 MyClass.MyMethod 的调用将如下所示。 MyClass.MyMethod(AddressOF SomeOtherProc) 我有一个类级委托 (Getter),其 sig 与方法参数委托 (g) 完全相同。我想要的 END RESULT 是将 Getter 设置为在对 MyMethod 的调用中设置的 AddressOf g。我不是在这里处理事件。赛斯
    • @Seth:如果您不需要完整的活动,那么您需要一个委托类型的字段(如 Joel 所示)。
    【解决方案2】:

    你还不能。您的 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(Of TResult) 声明的泛型类型没有连接到我刚刚在此处添加的委托变量的类型。您必须使整个类成为通用类,而不仅仅是使其工作的方法。

    我也想知道你为什么不直接使用现有的 Func(Of T) 委托?

    【讨论】:

    • Func (Of T) 在 NET 2 中不可用。
    • @Seth 好的。更新了您的问题标签,以便我们了解该部分。
    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多