在.NET中继承自非抽象的抽象类?

时间:2013-06-14 10:16:59

标签: .net templates generics inheritance abstract-class

我想知道具体(即非抽象)类的子类是否可以是抽象的。在一个虚构的例子中:

public class HistoricallyManaged<SpecificType> 
  { // code to manage history }

public abstract class ComputationalNode<SpecificType>: HistoricallyManaged<SpecificType>
  { // common methods implemented, but some left to concrete classes }

public class Formula<SpecificType>: ComputationalNode<SpecificType> 
  { // code to manage common formula behavior like checking if parameters have been calculated }

public class Variable<SpecificType>: ComputationalNode<SpecificType>  
 { // code to manage common variable behavior like persisting values }

// usage example
public class SomeOtherClass {
  private Formula<int> intFormula;
  private Formula<double> doubleFormula;
  private Variable<int> intVar;
  private Variable<double> doubleVar;
}

在上面的示例中,我想禁止实例化 ComputationalNode 或使用模板绑定来制作类似 ComputationalNode 的类型,但我确实想要声明 HistoricallyManaged 和其他类型,在层次结构实例化中必须更高,但不能在中间层。

感谢您的宝贵帮助。

1 个答案:

答案 0 :(得分:0)

当然可以。 object不是abstract(虽然应该是IMO),所以每个 abstract class实际上都是这样的一个例子:

abstract class Foo {} // tada! - note this is implicitly : object

但是,在创建它的实例之前,您需要进一步将其子类化为非abstract

但要明确:

class Foo {} // fine
abstract class Bar : Foo {} // fine
class Blap : Bar {} // fine