1

以下 VB.Net 代码在运行时失败并出现InvalidCastException错误。如果我将变量的类型a1从更改Objectclass A则程序执行正常。

我想在不更改Test()下面示例代码中的函数的情况下解决此问题。如果需要,我可以轻松更改Class Aor的定义。Class B

Public Class A
    Public Shared Widening Operator CType(ByVal d As A) As B
        Return New B
    End Operator
End Class

Public Class B

End Class

Module X
    Public Sub Test()
        Dim a1 As Object = New A

        Dim b1 As B
        b1 = a1                         ' Fails with System.InvalidCastException

    End Sub
End Module
4

1 回答 1

1
    Dim a1 As Object = New A

将 a1 声明为对象似乎是编译器抱怨代码的一种解决方法。但它不起作用,也不能起作用,因为 CLR 不会在运行时寻找转换运算符。VB.NET 语言规范在第 9.8.3 章中阐明了规则:

类型不能声明转换,其中:

  • 源类型和目标类型相同。
  • 源类型和目标类型都不是定义转换运算符的类型。
  • 源类型或目标类型是接口类型。
  • 源类型和目标类型通过继承(包括对象)相关联。

最后一颗子弹是你的克星。只需使用一个函数。

于 2013-04-28T02:45:01.133 回答