衍生抽象属性

时间:2019-02-12 10:23:59

标签: c# abstract derived-class

我有一个具有抽象属性的基类:

public class BottomClass {
  public abstract string Name {get;set;}
}

我现在有一个派生自该类的类:

public class MiddleClass:BottomClass {
  public override string Name {get;set;}
}

我现在想要的是“ MiddleClass”本身将该属性定义为抽象的,因此派生自该类的类将被强制实现该属性。以下代码不是那样工作:

public class MiddleClass:BottomClass {
  public abstract override string Name {get;set;} // Not possible that way
}

public class TopClass:MiddleClass {
  public override string Name {get;set;} ="tothetop";
}

有没有办法实现我想要的?

2 个答案:

答案 0 :(得分:2)

如果将属性定义为抽象,则必须在某些非抽象类中实现它。因此,在两个类中都具有该属性的唯一可能方法是

public abstract class BottomClass
{
    public abstract string NameB { get; set; }
}

public abstract class MiddleClass : BottomClass
{
    public abstract string NameM { get; set; } 
}

public class TopClass : MiddleClass {
    public override string NameB { get; set; }
    public override string NameM { get; set; }
}

据我了解,您的意图是在MiddleClass中拥有“ Name”属性。

或者不要实施它,如Damien上面所述。

答案 1 :(得分:1)

如果出于某种原因不使类抽象化,则抛出异常。

public class MiddleClass:BottomClass
{
    public override string Name
    {
        get => throw new NotImplementedException();
        set => throw new NotImplementedException();
    }
}