我只是回答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是一个类型,不能用作表达式。
你是怎么做到的?
赛斯
答案 0 :(得分:2)
我不太确定你要做什么 - 在你的代码中,Getter
是一个类型的名称(一个委托类型),而不是你可以分配一些东西的类的实例字段到。
您是否打算声明一个事件(其他用户可以注册处理程序)?如果是这种情况,请参阅MSDN上的this article。
答案 1 :(得分:1)
你还不能。你的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)
代表?