我有一个具有抽象属性的基类:
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";
}
有没有办法实现我想要的?
如果将属性定义为抽象,则必须在某个非抽象类中实现它。因此,在两个类中拥有属性的唯一可能方法是
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在上面评论的那样。
如果你有某些理由不让这个类抽象,就抛出异常。
public class MiddleClass:BottomClass
{
public override string Name
{
get => throw new NotImplementedException();
set => throw new NotImplementedException();
}
}