如何防止隐藏或覆盖公共财产

Luc*_*s B 3 c# oop inheritance compiler-errors

我有一个抽象的基类,它有一个属性,我想防止隐藏,也就是新的,并覆盖.

public abstract class DomainObject
{
    public bool IsDeleted { get; set; }
}

public class BankAccount : DomainObject
{
    public bool IsDeleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是:我需要BankAccount继承基础DomainObject类,所以我不能将其标记为密封,但我想在编译时防止IsDeleted的情况,一个覆盖或新的.

Jar*_*Par 11

在这种情况下IsDeleted,不是虚拟的,因此无法覆盖.通常,虽然您可以通过不首先使属性成为虚拟或通过sealed在属性上指定修饰符来防止进一步覆盖来阻止覆盖情况

public sealed override IsDeleted { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是你不能阻止通过隐藏new.除了完全阻止子类型之外,无法阻止子类型new在现有属性上使用