我有以下代码编译没有问题。当然,在执行Dim C As IDoThingsC = GetThing_C()时,我得到了一个无效的强制转换异常。我是不是遗漏了什么?您是否希望返回一个不满足函数返回值的接口要求的对象?
Public Class ClassA
Public Sub DoThings_A()
Debug.Print("Doing A things...")
End Sub
End Class
Public Class ClassB
Implements IDoThingsC
Public Sub DoThings_B()
Debug.Print("Doing B things...")
End Sub
Public Sub DoThings_C() Implements IDoThingsC.DoThings_C
Debug.Print("Doing C things...")
End Sub
End Class
Public Interface IDoThingsC
Sub DoThings_C()
End Interface
Public Class aTest
Public Sub Test()
Dim C As IDoThingsC = GetThing_C()
C.DoThings_C()
End Sub
Public Function GetThing_C() As IDoThingsC
Dim Thing As ClassA = New ClassA
Thing.DoThings_A()
Return Thing
End Function
End Class发布于 2010-01-09 03:18:42
在源代码文件的顶部使用Option Strict On来捕获这样的问题。您将得到一个编译时错误,而不是运行时错误:
error BC30512: Option Strict On disallows implicit conversions from 'ClassA' to 'IDoThingsC'.发布于 2010-01-09 03:19:42
摘自http://msdn.microsoft.com/en-us/library/h5fsszz9(VS.80).aspx
在数据类型之间进行转换时,Visual Basic编译器可以在严格或允许的类型语义下操作。如果严格类型语义有效,则只允许隐式扩大转换,而缩小转换必须是显式的。在允许的类型语义下,您可以尝试隐式地进行所有扩大和缩小转换。类型语义适用于所有数据类型之间的转换,包括对象类型。
发布于 2010-01-09 06:42:46
Option Strict将解决这个问题。但是"ClassA“也没有实现任何接口。因此,将Class A的定义更改为以下定义将解决您的问题:
Public Class ClassA
Implements IDoThingsC
Public Sub DoThings_A()
Debug.Print("Doing A things...")
End Sub
End Classhttps://stackoverflow.com/questions/2030020
复制相似问题