BYVAL:
Public Sub foo()
bar(AddressOf baz)
End Sub
Public Sub bar(ByVal numFun As Action(Of Integer))
End Sub
Public Sub baz(ByVal num As Integer)
End Sub
的ByRef:
Public Sub foo()
bar(AddressOf baz)
End Sub
Public Sub bar(ByVal numFun As Action(Of Integer))
End Sub
Public Sub baz(ByRef num As Integer)
' num has been changed to ByRef above ^^^
End Sub
以上情况很好,没有错误。但是,如果参数更改为ByRef,如下所示,则会引发以下错误:
错误:方法'Public Sub baz(ByRef Integer)'没有 签名与代表'公共代表子行动(In 整数)(整数)'
它在错误中给出的签名与我所拥有的签名不匹配 - 什么是“(Of Of Integer)(整数)”?我没有实例化任何东西。为什么“在”?无论如何,我真正追求的是如何使这项工作。我不能改变必须保留的ByRef。
***注意:我知道我可以创建一个显式委托,但我不想因为我在整个代码中有几个这个问题的实例,这似乎是不必要的开销。
非常感谢提前
答案 0 :(得分:2)
Delegate Sub MyAction(Of T)(ByRef num As T)
Public Sub foo()
bar(AddressOf baz)
End Sub
Public Sub bar(numFun As MyAction(Of Integer))
End Sub
Public Sub baz(ByRef num As Integer)
' num has been changed to ByRef above ^^^
End Sub
<强>更新强>
无法宣布您的ByRef
Delegate
。这是System.Action(Of T)
:
Public Delegate Sub Action(Of In T)(obj As T)
因此您无法将System.Action
用于ByRef
参数,因为它已被声明为ByVal
。