从非抽象类派生抽象类

时间:2010-04-08 19:12:56

标签: c# .net 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
}

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

4 个答案:

答案 0 :(得分:56)

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

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

真实世界的例子:

Person - 具体(非抽象)
Sibling: Person - 抽象
Brother: Sibling - 具体
Sister: Sibling - 具体

答案 1 :(得分:18)

没有错。

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

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

答案 2 :(得分:13)

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

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

答案 3 :(得分:0)

然后,使用抽象不是正确的方法,例如,使用受保护或内部构造函数。这样可以防止直接创建PeriodicalTask​​的实例,但是它的派生类仍然可以访问它。