如何在C#中隐藏(删除)基类的方法? [重复]

这个问题已经在这里有一个答案:            >            C# – Can publicly inherited methods be hidden (e.g. made private to derived class)                                    9个答案                                这个问题的本质就是这样一个类层次结构:

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中,通过使用诸如B类:private A之类的声明,这很简单,但这种语法在C#中无效。

对于那些感兴趣的人(或想知道我真的想做什么),我们要做的是为Rhino.Commons.NHRepository创建一个包装器,它隐藏了我们不想向我们的开发团队公开的方法,所以我们可以通过开发我们的应用程序的cookie-cutter方式来开发新的开发人员。所以是的,我相信“Is-A”测试对于整个链(WidgetRepository Is-A BaseRepository Is-A NHRepository)是有效的。

编辑:我应该提到,为了论证,A类是我们控制之外的一个API类。否则,问题就会变得容易得多。

您不能这样做并保留层次结构。如果可能,您应该创建定义您的理想的接口,然后对基类进行子类化并实现接口。仅引用代码中的接口(而不是基类类型)。

Adapter pattern专门用于解决当API不符合您的需求时如何使用框架的问题。

http://stackoverflow.com/questions/1125746/how-to-hide-remove-a-base-classs-methods-in-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在C#中隐藏(删除)基类的方法? [重复]