我创建了一个具有许多公共属性的基类,并且使用得很完美。现在我想使用这个类来派生其他类,但我不希望它的一些属性暴露在继承它的派生类之外。有没有办法让公共基类的属性不能暴露在它的派生类之外。(要隐藏的属性是公共的,因为它们在其他继承它的类中使用。)任何帮助都将高度重视。
答案 0 :(得分:5)
你想要他们protected。
来自MSDN:
受保护的成员可以在其类和派生类实例中访问。
答案 1 :(得分:1)
我同意cadrell0关于标记它们的保护,但是如果您正在寻找属性实际为public
的解决方案,但对某个派生类的用户隐藏,则可以使用{{3 }}
interface IHaveMethodsYouCanHide { void Foo(); }
class Base : IHaveMethodsYouCanHide { public void Foo() {} }
class NonHidingDerived : Base { }
class HidingDerived : Base, IHaveMethodsYouCanHide
{
void IHaveMethodsYouCanHide.Foo() {}
}
使用此代码,HidingDerived类型的标识符将不允许调用Foo(除非首先强制转换为IHaveMethodsYouCanHide)。
答案 2 :(得分:1)
你所要求的是根本不可能的。如果类型B继承自类型A,则它是“是-a”类型A. B至少具有与类型A相同的可访问合同。在没有从根本上违反本合同的情况下,无法隐藏A的公共成员。
如果您发现自己处于想要使用A但仅暴露属性子集的场景中,那么继承不是正确的解决方案:包含是正确的解决方案。
public class B {
private A m_wrapped;
// Expose only the properties you want to expose here
}