VB.NET 接口(interface)实例化异常

标签 vb.net interface instantiation

我正在查看我们拥有的一些遗留代码,我注意到一些让我感到特别奇怪的东西。

假设我们有具体类 TestClass . TestClass实现接口(interface)ITestClass .

那么,在以下情况下,我应该期待什么样的行为呢? (我什至没有意识到这是可能的)

Dim testClass as TestClass = Nothing
Try
   testClass = New ITestClass
   ...
End Try

据我了解,您将被迫使用 TestClass而不是它的接口(interface)对应物。

最佳答案

有一种特殊情况,接口(interface)可以像类一样被实例化,它与 CoClassAttribute 相关。 .有关详细信息,请参阅此博客文章:

  • Unnatural acts on source code: Instantiating interfaces

  • 博客文章中翻译为 VB 的示例:
    <ComImport(), Guid("C906C002-B214-40d7-8941-F223868B39A5"), CoClass(GetType(Foo))> _
    Public Interface IFoo
    End Interface
    
    Public Class Foo
        Implements IFoo
    End Class
    
    Sub Main()
        Dim f As New IFoo()    ' Compiles
    End Sub
    

    关于VB.NET 接口(interface)实例化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988803/

    相关文章:

    c# - 转换运算符仅适用于数字类型.net

    c# - 4 点变换图像

    vb.net - 以编程方式获取Vb.net中用户已激活的事件的列表

    java - 根据从 Fragment A 收集的数据使用较少的样板代码从 Activity 启动 Fragment B

    java - 与 Guava 的Optional<T> 一起,Mandatory<T> 会是一个有用的补充吗?

    android - 将公共(public)属性和方法暴露给主 Activity 中的 fragment 是否是一种不好的形式?

    .net - 强制 .NET Windows 应用程序。以英文形状显示数字

    java - 通过从注释属性获取的路径实例化对象

    Java:在运行时扩展类

    php - 如何使用另一个对象实例初始化 PHP 类的实例?