[英]how to hide parent property from child class
如何隐藏子类中的父类属性。
父类的属性称为“父类”,而我不想在子类中使用该属性。 如何删除或隐藏它。
因此,听起来您在问以下问题。 你有
class Parent {
public SomeType ParentProperty { get; set; }
}
class Child : Parent { }
并且您想要隐藏SomeProperty
使其在Child
实例中不可见。
不要这样做! 不要从基类中隐藏可见的属性。 首先,很容易解决:
Parent p = new Child();
p.ParentProperty; // oops!
其次,这严重违反了Liskov替代原则 。 原则上说,原则上说,您知道对Parent
所有实例都是正确的任何事情也应该对Child
所有实例都正确。 在这里,我们知道Parent
所有实例都有一个名为SomeType
类型的称为ParentProperty
的可见属性。 因此,对Child
的所有实例都应该如此(道德上应该如此)。
您能告诉我们为什么要这样做吗,也许我们可以建议替代方法?
别。
如果需要,您会遇到一个设计问题。 Liskov替代原则告诉您,您的Child
班应该代替Parent
班。 这意味着所有使用Parent
类的代码都应该能够使用Child
类。 如果要删除属性,则不是这种情况。 无论在何处使用特定属性,都不能用“子代”替换“父代”。
我想很明显的问题/答案是,也许您应该将房地产设置为私有。 (除非您当然无权使用源代码)
希望有帮助,您可以隐藏该属性并将其设置为readonly :)
如果您在说孩子班级时派生了班级,那么幸运的是,没有办法让它成为现实。 要知道为什么这是不好的故事,请查看以下代码:
base myObj = objectFactory.Create(); myObj.theMethodHiddenAway();
工厂可以返回任何类型为base的对象,包括从base派生的所有类。 编译器需要确定哪个版本的MethodHiddenAway调用编译时间(重载重载),并且由于它没有具体的类型编译时间,因此如果可以通过继承使方法消失,则编译器将不知道MethodHiddenAway是否甚至存在。
我建议您看一下您的设计,因为您要问的东西听起来像是两个设计缺陷之一。 方法要么不属于该方法,要么派生类不应该从基类继承
你不能 子类引用将始终可以隐式转换为父类引用,因此您不能防止将该属性从父类中删除而使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.