繁体   English   中英

无法创建抽象类或接口的实例

[英]Cannot create an instance of the abstract class or interface

我对使用abstract class并不熟悉。

我试图调用一个abstract class并得到此错误Cannot create an instance of the abstract class or interface我已经研究了这个错误,但我真的很困惑。

这是我的代码:

        string B1String;
        while ((B1String = OasisFile.ReadLine()) != null)
        {
          Questions_Base oQuestions_Base = new Questions_Base(); // error here
          oQuestions_Base.Import(B1String);
        }

请指教我...谢谢!

抽象类的目的是作为类层次结构的一部分,其中更多派生类共享一些常见的实现。

如果你有一个飞行模拟器,你可以定义一个抽象类ThingsThatFly来实现一些属性(空中速度,高度,航向)和方法(TakeOff(),Land())所有飞行物具有共同点,但会被宣布为抽象因为ThingsThatFly是所有飞行的具体事物的抽象。 你当然可以有类其间还有,例如Cessna172可以继承Airplane从继承ThingsThatFly 如果所有飞机都有一些常见的实施例如鸟类没有(例如,剩余燃料),那么你会这样做。

然后你会有一些具体(=现实生活)的东西像塞斯纳172,航天飞机和鸭子一样飞翔。 其中每一个都是源自ThingsThatFly的具体类

这与具体类实现诸如IThingsThatFly类的接口的IThingsThatFly处在于,抽象类不仅提供了期望的属性和方法的定义,而且还提供了这些属性和方法的(希望有用的)实现。

Abstract类只能被继承。

public class CustomClass : Questions_Base {
}

这里有一个链接所有关于抽象类和如何使用它们。

你不能创建一个抽象类的实例。

您需要定义一个继承抽象类的具体类,并创建该实例。

  1. Abstract类被Derived类覆盖 如果必须使用Abstract类,首先从中创建s Derived类并使用Derived类构造函数。
  2. 如果它不重要,只需从Questions_Base类声明中删除abstract单词,从而使其成为非抽象单词。 另外因为在提供的代码中我没有看到任何abstract成员,所以这个可能是正确的选择。

问候。

无法实例化抽象类。 您必须为该类提供实现。

    abstract class Animal
    {
        public abstract void Speak() { }
    }

    public class Dog : Animal
    {
        public override void Speak()
        {
            Console.WriteLine("Woof");
        }
    }

有关详细信息,请参阅摘要上的MSDN

从文档:“abstract关键字使您能够创建不完整的类和类成员,并且必须在派生类中实现。”

使用抽象的目的正是为了防止实例化,因为您只创建了用作基类的类,并且从不希望创建实例。

更多这里

抽象类是必须继承的类。

它位于Interface之间,它只定义了一个类必须实现的接口,没有实现代码,还有一个类可以创建一个定义接口和实现代码的实例。 .NET框架中有几个抽象类,如CollectionBase。 您无法创建CollectionBase的实例,它旨在创建一个继承自它的类并扩展它的功能。

您应该能够简单地从Questions_Base的类定义中删除kwy工作“abstract”,或者创建一个继承自它的新类定义。

在类定义中由关键字abstract标记的抽象类通常用于在层次结构中定义基类。 它们的特殊之处在于,您无法创建它们的实例 - 如果您尝试,您将收到编译错误。 相反,您必须按照继承章节中的教导对它们进行子类化,并创建子类的实例。 那么你什么时候需要一个抽象类呢? 这取决于你做了什么。 说实话,你可以在不需要抽象类的情况下走很长的路,但它们对于特定的东西很有用,比如框架,这就是为什么你会在它自己的.NET框架中找到相当多的抽象类。 一个好的经验法则是名称实际上非常有意义 - 抽象类经常(如果不是总是)用于描述抽象的东西,更多的是概念而不是真实的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM