首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么接口不是强类型的?

为什么接口不是强类型的?
EN

Stack Overflow用户
提问于 2010-01-09 03:10:01
回答 3查看 643关注 0票数 4

我有以下代码编译没有问题。当然,在执行Dim C As IDoThingsC = GetThing_C()时,我得到了一个无效的强制转换异常。我是不是遗漏了什么?您是否希望返回一个不满足函数返回值的接口要求的对象?

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-09 03:18:42

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

代码语言:javascript
运行
复制
error BC30512: Option Strict On disallows implicit conversions from 'ClassA' to 'IDoThingsC'.
票数 13
EN

Stack Overflow用户

发布于 2010-01-09 03:19:42

摘自http://msdn.microsoft.com/en-us/library/h5fsszz9(VS.80).aspx

在数据类型之间进行转换时,Visual Basic编译器可以在严格或允许的类型语义下操作。如果严格类型语义有效,则只允许隐式扩大转换,而缩小转换必须是显式的。在允许的类型语义下,您可以尝试隐式地进行所有扩大和缩小转换。类型语义适用于所有数据类型之间的转换,包括对象类型。

票数 1
EN

Stack Overflow用户

发布于 2010-01-09 06:42:46

Option Strict将解决这个问题。但是"ClassA“也没有实现任何接口。因此,将Class A的定义更改为以下定义将解决您的问题:

代码语言:javascript
运行
复制
Public Class ClassA
  Implements IDoThingsC

  Public Sub DoThings_A()
    Debug.Print("Doing A things...")
  End Sub

End Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2030020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档