【发布时间】:2010-11-10 16:15:12
【问题描述】:
问题的本质是,给定这样的类层次结构:
class A
{
protected void MethodToExpose()
{}
protected void MethodToHide(object param)
{}
}
class B : A
{
new private void MethodToHide(object param)
{}
protected void NewMethodInB()
{}
}
class C : B
{
public void DoSomething()
{
base.MethodToHide("the parameter"); // This still calls A.MethodToHide()
base.MethodToExpose(); // This calls A.MethodToExpose(), but that's ok
base.NewMethodInB();
}
}
如何防止从类“B”继承的任何类看到方法A.MethodToHide()?在 C++ 中,使用 class B : private A 之类的声明很容易做到这一点,但这种语法在 C# 中无效。
对于那些感兴趣的人(或者想知道我真正想要做什么),我们想要做的是为 Rhino.Commons.NHRepository 创建一个包装器,它隐藏了我们不使用的方法不想暴露给我们的开发人员,所以我们可以有一种千篇一律的方式来开发我们的应用程序,新开发人员可以轻松地遵循。所以是的,我相信“Is-A”测试对整个链都有效(WidgetRepository Is-A BaseRepository Is-A NHRepository)。
编辑:为了论证,我应该提到 A 类是我们无法控制的 API 类。否则问题会变得相当容易。
【问题讨论】:
标签: c# inheritance language-features inheritance-prevention