【发布时间】:2012-05-25 02:25:27
【问题描述】:
有没有办法隐藏基类的成员?
class A
{
public int MyProperty { get; set; }
}
class B : A
{
private new int MyProperty { get; set; }
}
class C : B
{
public C()
{
//this should be an error
this.MyProperty = 5;
}
}
【问题讨论】:
-
没有。那没有。 C# ascribes to the LSP。能做的最好的就是抛出异常;或者在某些情况下使用更精细的接口。
-
@pst:Eric Lippert 在几次讨论中向我明确表示,C# 中的子类型化不使用 Liskov 定义。
-
我很好奇你为什么要这样做。
-
@BenVoigt 我有兴趣阅读有关该主题的资源。每当我想到 LSP 时,我通常只考虑一种温和的形式(例如,主要是签名,不一定是不变量或它涵盖的所有其他语义)。
-
@casablanca,我想这样做,因为我覆盖了一个提供许多覆盖方法的基类,其中一个使用了一个属性,我省略了该属性的用法,所以我想关于删除它。
标签: c# inheritance polymorphism shadow member-access