为什么接口没有强类型?

JRS*_*JRS 4 vb.net interface strong-typing

我有以下代码编译没有问题.当然,我在执行时遇到了无效的强制转换异常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
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 13

Option Strict On在源代码文件的顶部使用来捕获这样的问题.您将收到编译时错误而不是运行时错误:

error BC30512: Option Strict On disallows implicit conversions from 'ClassA' to 'IDoThingsC'.
Run Code Online (Sandbox Code Playgroud)

  • 是否仍然*可以用这个将要编译的交叉手指和希望变成乐观的方式编写VB代码?为什么还没有删除它? (6认同)
  • 当然.更好的是 - 我在项目的编译选项中更改了Option Strict选项(这样我就不必将其添加到每个代码模块中). (2认同)