0

我创建了一个基类,它具有许多公共属性并且被完美地使用。现在我想使用这个类来派生其他类,但我不希望它的某些属性暴露在继承它的派生类之外。有没有办法使基类的公共属性不能在其派生类之外公开。(要隐藏的属性是公共的,因为它们在继承它的其他类中使用)。任何帮助都将受到高度重视。

4

3 回答 3

5

你想让它们受到保护

来自 MSDN:
受保护的成员可在其类内和派生类实例中访问。

于 2012-03-01T18:50:12.330 回答
1

我同意 cadrell0 关于将它们标记为受保护的观点,但如果您正在寻找属性实际存在public但对某个派生类的用户隐藏的解决方案,您可以使用显式接口

interface IHaveMethodsYouCanHide { void Foo(); }
class Base : IHaveMethodsYouCanHide { public void Foo() {} }
class NonHidingDerived : Base { }
class HidingDerived : Base, IHaveMethodsYouCanHide
{
  void IHaveMethodsYouCanHide.Foo() {}
}

使用此代码,HidingDerived 类型的标识符将不允许调用 Foo(除非首先转换为 IHaveMethodsYouCanHide)。

于 2012-03-01T19:06:24.177 回答
1

你所要求的根本不可能。如果类型 B 继承自类型 A,那么它“是”类型 A。B 至少具有与类型 A 相同的可访问合同。在不从根本上违反本合同的情况下,没有办法隐藏 A 的公共成员。

如果您发现自己处于想要使用 A 但只公开属性子集的场景中,那么继承不是正确的解决方案:包含是正确的解决方案。

public class B { 
  private A m_wrapped;

  // Expose only the properties you want to expose here
}
于 2012-03-01T19:11:47.993 回答