从非抽象类继承时要求重写属性

时间:2018-10-31 18:42:06

标签: c# inheritance

在基类不是抽象的情况下,是否有一种方法要求在派生类中重写属性?例如:

public abstract class BaseClass
{
    protected abstract string Test {get;}
}

internal class FirstClass : BaseClass
{
    protected override string Test => "First Class";
    // Methods common to FirstClass and SecondClass
}

internal class SecondClass : FirstClass
{
    protected override string Test => "Second Class"
}

如果任何类继承自test,是否有一种方法可以强制FirstClass中的属性FirstClass被覆盖?

对此的实际需求(可能不大)是,在记录信息时,我们要记录错误源(类名等),因此我们想强制所有叶派生类重写某些属性。

1 个答案:

答案 0 :(得分:8)

  

当基类不是抽象的时候,是否有一种方法要求在派生类中重写属性?

(原始问题询问字段。字段可能根本不会被覆盖;您的意思是“属性”,而不是“字段”。)

否。

派生类是否选择重写是实现细节,该实现细节取决于该派生类的作者,他比该基类的作者更了解该类的业务领域。

使成员必须被覆盖的唯一方法是使其成为抽象。

使用摘要覆盖 是合法的。例如,这将是合法的:

abstract class BaseClass
{
    protected virtual string Test => "Base";
}
abstract class FirstClass : BaseClass
{
    // override abstract is slightly unusual but legal
    protected override abstract string Test { get; }
    // Concrete derived classes must override
}
class SecondClass : FirstClass
{
    protected override string Test => "Second Class"
}