【问题标题】:How do I use an Interface or Abstract class in C#? [duplicate]如何在 C# 中使用接口或抽象类? [复制]
【发布时间】:2013-03-08 09:26:17
【问题描述】:

我已获得第 3 方 DLL。

我首先尝试像这样启动对象:

TestClass MyClass = new TestClass();

但 Visual Studio 告诉我使用界面。

我以前从未这样做过,也不知道从哪里开始。

错误:

“MyClass.blabla”类型没有定义互操作类型的构造函数 无法嵌入“MyClass.Subclass”。使用适用的接口 而是。

【问题讨论】:

  • 它告诉你使用什么界面?你能在你的问题中发布确切的错误信息吗?
  • 只要第三方DLL提供接口,如果没有可以使用var关键字
  • 类型“MyClass.blabla”没有定义构造函数 无法嵌入互操作类型“MyClass.Subclass”。请改用适用的接口。

标签: c#


【解决方案1】:

这可能是因为您使用的是 COM 类。如果是这种情况,您很可能会想写:

ITest myTest = new TestClass();

COM 包装器经常通过名为 TestClass 的 CoClass 公开 ITest 接口。但是,在使用 COM 时,您(按设计)通常只针对接口 (ITest) 编写代码,并且不想直接针对实现编写代码。

【讨论】:

    【解决方案2】:

    这完全取决于TestClass 的声明方式。如果 TestClass 是 abstract,则不能直接创建它的实例,而是必须从 TestClass 的 Derived 类之一创建实例。

    TestClass test = new TestClassDerived();
    

    在哪里

    class TestClassDerived : TestClass
    {
    
    }
    

    【讨论】:

    • 我试过这个,但它希望我在我的 TestClassDerived 中实现所有的 TestClass 函数。有数百个。我只想访问 DLL 中已有的函数。
    • 如果有 100 种方法,您必须编写它!这就是面向对象编程的工作原理。
    • Visual Studio 会生成所有需要的方法,所以如果你只需要使用现有的非抽象方法就不用担心了!
    【解决方案3】:

    它可能会为您提供某种初始化方法或作为构造函数传递。您不能以您尝试的方式实例化抽象类或接口(即调用构造函数)

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2010-10-15
      相关资源
      最近更新 更多