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

Yit*_*tuo 0 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"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法强制性质testFirstClass,如果任何类继承自被重写FirstClass

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

Eri*_*ert 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"
}
Run Code Online (Sandbox Code Playgroud)