在基类不是抽象的情况下,是否有一种方法要求在派生类中重写属性?例如:
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
被覆盖?
对此的实际需求(可能不大)是,在记录信息时,我们要记录错误源(类名等),因此我们想强制所有叶派生类重写某些属性。
答案 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"
}