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