我不熟悉使用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);
}
请建议我..谢谢!
答案 0 :(得分:8)
抽象类的目的它作为类层次结构的一部分,其中更多派生类共享一些常见的实现。
如果您有飞行模拟器,您可以定义一个抽象类ThingsThatFly
来实现所有飞行物具有的一些属性(空中速度,高度,航向)和方法(TakeOff(),Land())通用,但会被声明为 abstract ,因为ThingsThatFly是所有飞行的具体事物的抽象。您当然也可以在中间使用类,例如Cessna172
可以从继承自Airplane
的{{1}}继承。如果所有飞机都有一些共同的实施,例如,你会这样做鸟类没有(例如,剩余燃料)。
然后你会有一些具体(=现实生活)的东西像塞斯纳172,航天飞机和鸭子一样飞翔。其中每一个都是一个源自ThingsThatFly
这与具体类实现诸如ThingsThatFly
之类的接口不同之处在于,抽象类不仅提供了所期望的属性和方法的定义,而且还提供了(希望有用的)实现。那些属性和方法。
答案 1 :(得分:3)
答案 2 :(得分:3)
您无法创建抽象类的实例。
您需要定义一个继承抽象类的具体类,并创建该实例。
答案 3 :(得分:2)
Abstract
类被Derived类覆盖。如果您必须拥有Abstract
类,请先从中创建一个Derived
类,然后使用Derived
类构造函数。abstract
类声明中删除Questions_Base
单词,这样就可以使其成为非抽象单词。另外,因为在提供的代码中我没有看到任何abstract
成员,所以这个可能是正确的选择。问候。
答案 4 :(得分:2)
无法实例化抽象类。您必须为该类提供实现。
abstract class Animal
{
public abstract void Speak() { }
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Woof");
}
}
有关详情,请参阅摘要上的MSDN
答案 5 :(得分:2)
来自文档:“abstract关键字使您能够创建不完整的类和类成员,并且必须在派生类中实现。”
使用abstract的目的正是为了防止实例化,因为你只创建了用作基类的类,并且从不想要创建实例。
更多here。
答案 6 :(得分:2)
抽象类是必须继承的类。
介于接口之间,接口只定义类必须实现的接口,没有实现代码,以及可以创建定义接口和实现代码的实例的类。 .NET框架中有几个抽象类,如CollectionBase。您无法创建CollectionBase的实例,它旨在创建一个继承自它的类并扩展它的功能。
您应该能够简单地从Questions_Base的类定义中删除kwy工作“abstract”,或者创建一个继承自它的新类定义。
答案 7 :(得分:0)
抽象类(由类定义中的关键字abstract标记)通常用于在层次结构中定义基类。它们的特殊之处在于,您无法创建它们的实例 - 如果您尝试,您将收到编译错误。相反,您必须按照继承章节中的教导对它们进行子类化,并创建子类的实例。那么你什么时候需要一个抽象类呢?这取决于你做了什么。说实话,你可以在不需要抽象类的情况下走很长的路,但它们对于特定的东西很有用,比如框架,这就是为什么你会在它自己的.NET框架中找到相当多的抽象类。一个好的经验法则是名称实际上非常有意义 - 抽象类经常(如果不是总是)用于描述抽象的东西,更多的是概念而不是真实的东西。