是否可以隐藏派生类的属性?

时间:2010-08-31 07:43:14

标签: c#

A类派生自B类。在A类中,我想隐藏从B类继承的一些属性。因此,当创建A类实例时,我不想暴露B类中的某些属性。

这可能吗?

6 个答案:

答案 0 :(得分:8)

不,那会破坏继承的目的。您的A类是B,因此它具有B

的属性

答案 1 :(得分:2)

是否可以将私有访问说明符用于您要隐藏的属性?

如果没有,那么请通过这个链接 - 可能会帮助你 - c# hide from dervied classes some properties of base class

答案 2 :(得分:2)

您可以通过声明具有相同名称(和新修饰符)的新成员来遮蔽成员。但这并没有真正隐藏任何东西,并且不会阻止任何人回到B并以这种方式访问​​成员。

在这种情况下,您确定要真正使用继承吗?您可能需要阅读http://en.wikipedia.org/wiki/Liskov_substitution_principle

答案 3 :(得分:2)

当您从A派生B时,您说AB几乎相同,但它具有其他特征;它是B的专业化。

举个例子:DogAnimal。在你的情况下,你试图说Animal有鳍,但是Dog却没有;这绝对不是继承的目的。

答案 4 :(得分:1)

为实现这一目标,不要将属性设为私有,而应避免继承并应用组合(即使用接口)。

答案 5 :(得分:0)

你的意思是:

class A {
    public virtual int X {
        get { return 1; }
    }
}

class B : A {
    public sealed override int X {
        get { return 2; }
    }
}

class C : B {
    public override int X {
        get { return -1; }
    }
}

如果是的话,是的。 (以上在C中提供了编译时错误)。这里的含义是A有一个属性,B实现了它,并希望阻止任何子类这样做。