我有一个关于byRef传递参数的问题,我有一个基于VB.NET的类库,在其中定义了一些带有byref参数类型的函数。这些参数是父类对象,当我尝试调用这个函数并在byref参数中传递子类对象时,它在VB.NET中可以工作,但我无法在C#中做同样的事情。
以下是我正在尝试的测试代码:
Public Class Father
Private _Cast As String
Public Property Cast() As String
Get
Return _Cast
End Get
Set(ByVal value As String)
_Cast = value
End Set
End Property
End Class
Public Class Son
Inherits Father
Private _MyName As String
Public Property Myname() As String
Get
Return _MyName
End Get
Set(ByVal value As String)
_MyName = value
End Set
End Property
End Class
VB的实现类
Public Class Parent
Public Function Show(ByRef value As Father) As Boolean
Dim test As String = value.Cast
Return True
End Function
// 这里我可以调用 Show 方法并将子对象传递给 ByRef 类型参数,它可以正常工作
Public Function Show2() As Boolean
Dim s As New Son
Dim result As Boolean = Show(s)
Return True
End Function
End Class
// 但是当我尝试在C#中做同样的事情时
Parent p = new Parent();
Son s = new Son();
Father f = new Father();
p.Show(ref s);
我收到一个错误,提示儿子无法转换为父亲。我已经测试了VB版本,但是如何让它在C#中工作呢?我的类库以dll格式存在。
提前感谢你的帮助。
p.Show(ref ((Father)s)
- It'sNotALie.ByRef
没有任何理由存在,这是无意义的。 - H HParent.Show
方法可能会将Father value
变量重新分配给不是Son
的其他值;也许它会分配一个Daughter
实例。虽然我不确定为什么VB可以运行。 - Chris SinclairOption Strict Off
的情况。如果使用Option Strict On
,你会得到以下错误信息:"Option Strict On 不允许从类型 'Father' 缩小为类型 'Son',在将 'ByRef' 参数 'value' 的值复制回匹配的参数时。" - Mark Hurd