简体   繁体   中英

how to hide parent property from child class

How can I hide the parent class property in child class.

Where parent class has a property called "Parent", where I don't want to use that in child class. How can I remove or hide that.

So it sounds like you are asking the following. You have

class Parent {
    public SomeType ParentProperty { get; set; }
}

class Child : Parent { }

and you want to hide SomeProperty from being visible in instances of Child .

Do not do this! Do not hide properties from the base class that are visible. First, it's easy to get around:

Parent p = new Child();
p.ParentProperty; // oops!

Second, it's a huge violation of the Liskov substitution principle . Basically, the principle says that anything that you know to be true about all instances of Parent should also be true about all instances of Child . Here, we know that all instances of Parent have a visible property called ParentProperty of type SomeType . Therefore, the same should (moral should) be true of all instances of Child .

Can you tell us why you want to do this and maybe we can suggest an alternative?

Don't.

You have a design issue if you need this. The Liskov Substitution Principle tells you that your Child class should be substitutable for a Parent class. That means that all code which uses a Parent class should be able to use your Child class instead. This is not the case if you would remove a property. You couldn't replace a Parent with a Child wherever that particular property is used.

I guess the obvious question/answer is, maybe you should just make the property private. (unless of course you have no access to the source to begin with)

希望有帮助,您可以隐藏该属性并将其设置为readonly :)

If you derived class when you say child class there's luckily no way to make it go a way. To why that would be bad tale a look at this code:

base myObj = objectFactory.Create(); myObj.theMethodHiddenAway();

the factory Can return any object of type base including all classes that derive from base. The compiler needs to decide what version of theMethodHiddenAway to call compile time (overload resulution) and since it does not no the concrete type compile time, if it was possible to make a method go away by inheritance the compiler wouldn't know if theMethodHiddenAway even existed.

I'd suggest you look at your design since what you're asking smells like one of two design flaws. Either the method does not belong there in the first place or you derived class shouldnt inherit from the base class

You can't. A child class reference will always be implicitly convertable to a parent class reference, so you can't prevent the property from being used wihtout removing it from the parent class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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