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

时间:2010-08-24 15:35:56

标签: c# inheritance oop compiler-errors

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

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

public class BankAccount : DomainObject
{
    public bool IsDeleted { get; set; }
}

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

4 个答案:

答案 0 :(得分:11)

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

public sealed override IsDeleted { get; set; }

但是,您无法通过new阻止隐藏。除了完全阻止子类型之外,没有办法阻止子类型在现有属性上使用new

答案 1 :(得分:2)

为什么需要这样的功能?不可能既不阻止属性也不能防止方法隐藏在子类中。

答案 2 :(得分:2)

由于您在评论中提到的相同原因,我有同样的需求:防止生成的代码导致的问题。我的解决方案是将此特定警告设为错误,这可以通过将“0108”添加到“项目属性”=>来完成。 “Build”=> “将警告视为错误”=> “特定警告”清单。

我很想知道为什么这被认为只是一个警告,而不是一开始就是错误。当然,这是一些我认为没有考虑过的“脆弱的基类”......

答案 3 :(得分:0)

如何将祖先添加到DomainObject,其中IsDeleted将被标记为虚拟,之后在DomainObject中您可以将其标记为密封覆盖?