【发布时间】:2010-12-24 22:15:53
【问题描述】:
如果我有以下代码示例:
public class ClassBase
{
public int ID { get; set; }
public string Name { get; set; }
}
public class ClassA : ClassBase
{
public int JustNumber { get; set; }
public ClassA()
{
this.ID = 0;
this.Name = string.Empty;
this.JustNumber = string.Empty;
}
}
如何隐藏属性Name(不显示为ClassA成员的成员)而不修改ClassBase?
【问题讨论】:
-
这违反了 OOP 的基本原则之一(多态性以及相关的 SOLID 中的
L)。 -
特别违反了liskov替换原则(en.wikipedia.org/wiki/Liskov_substitution_principle)
-
许多答案忽略了一个简单的事实,即基类可能由第三方提供。由于此代码不属于自己,因此无法更改。希望通过隐藏成员来创建基类的更狭窄版本是绝对有效的。继承比使用基础控件作为新控件的组件更好,因为这需要大量额外的工作来公开基础上已经找到的方法。
-
@Mario,如果是这种情况,我强烈建议您创建自己的类实现并使用对象到对象映射器来设置您想要的属性。这样您就可以创建更窄的第三方类。
标签: c# inheritance properties base-class