当基类不是抽象的时候,有没有办法要求在派生类中重写属性?例如:
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"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法强制性质test的FirstClass,如果任何类继承自被重写FirstClass?
实际需要(可能不是很大)是在记录信息时,我们想记录错误源(类名等),因此我们要强制所有叶派生类重写某些属性.
当基类不是抽象的时候,有没有办法要求在派生类中重写属性?
(原始问题询问字段.字段可能根本没有被覆盖;你的意思是"属性",而不是"字段".)
没有.
派生类是否选择覆盖是一个实现细节,由该派生类的作者决定,该知识更多地了解该类的业务域,而不是基类的作者所知道的.
制作必须被覆盖的成员的唯一方法是使其成为抽象的.
它是合法的和抽象的覆盖.这是合法的,例如:
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"
}
Run Code Online (Sandbox Code Playgroud)