有没有办法让一个类"删除"它继承的方法?
例如,如果我不希望我的班级有一个ToString()方法,我可以做一些让它不再可用的东西吗?
问题的本质是,给定一个类层次结构如下:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何防止从类"B"继承的任何类看到该方法A.MethodToHide()?在C++中,通过使用诸如的声明这很容易class B : private A,但是这种语法在C#中无效.
对于那些感兴趣的人(或者想知道我真正想做什么),我们要做的是为Rhino.Commons.NHRepository创建一个包装器,它隐藏了我们不希望暴露给我们的开发人员组的方法,因此我们可以采用千篇一律的方式开发我们的应用程序,新开发人员可以轻松遵循.所以是的,我相信"Is-A"测试对整个链(WidgetRepository Is-A BaseRepository Is-A NHRepository)是有效的.
编辑:我应该提到,为了论证,A类是我们控制范围之外的API类.否则问题变得相当容易.