繁体   English   中英

如何从子类中隐藏父级属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM