从非抽象类派生抽象类

Jeh*_*hof 40 .net c# inheritance abstract

从非抽象类派生抽象类是否可以,或者这种方法有问题吗?

这是一个小例子:

public class Task {
  // Some Members
}

public abstract class PeriodicalTask : Task {
  // Represents a base class for task that has to be done periodicaly.
  // Some additional Members
}

public class DailyTask : PeriodicalTask {
  // Represents a Task that has to be done daily.
  // Some additional Members
}

public class WeeklyTask : PeriodicalTask {
  // Represents a Task that has to be done weekly.
  // Some additional Members
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我不想让类Task抽象,因为我想直接实例化它.PeriodicalTask​​应该从Task继承功能并添加一些额外的成员,但我不想直接实例化它.只应实例化PeriodicalTask​​的派生类.

Dan*_*Tao 57

我认为这种方法没有任何问题.

您可能有一些可以用具体术语描述的基本类型.现在,仅仅因为这种类型的对象可能会根据某个子类型进一步分类,并不是说所有这些子类型都具体; 他们可能反过来要求进一步具体化.

现实世界的例子:

Person- 混凝土(非抽象)
Sibling: Person- 抽象
Brother: Sibling - 混凝土
Sister: Sibling - 混凝土

  • 完美的例子Dan (2认同)
  • 您还可以用“抽象”方法覆盖具体(但虚拟)方法。示例“public abstract override string ToString();”使用“abstract”覆盖“System.Object”中具体的“ToString()”。这迫使所有派生类提供新的实现。 (2认同)

lep*_*pie 18

它没有错.

如果你看一下像WinForms这样的大层次结构,你会发现几层抽象类型.

MSBuild任务也是一个很好的(更相关)的例子.


Chr*_*ser 13

这种事情一直在发生:所有抽象类都继承自System.Object一个不是abstract它本身的类.

new System.Object() 有时用于锁定,如果你周围没有任何东西,你可以锁定.