Как скрыть (удалить) методы базового класса в C #? [Дубликат]

This question already has an answer here:

C# - Can publicly inherited methods be hidden (e.g. made private to derived class) 10 answers

Суть проблемы в заданной иерархии классов:

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();
    }
}

Как я могу предотвратить любые классы, которые наследуются от класса & quot; B & quot; видеть методA.MethodToHide()? В C ++ это было достаточно просто с помощью объявления, такого какclass B : private A, но этот синтаксис недопустим в C #.

Для тех, кто заинтересован (или интересно, что яreally пытаемся сделать), то, что мы пытаемся сделать, - это создать оболочку для Rhino.Commons.NHRepository, которая скрывает методы, которые мы не хотим показывать нашей группе разработчиков, поэтому мы можем иметь способ обрезки файлов cookie: разрабатывая наше приложение, за которым могут легко следить новые разработчики. Так что да, я верю, что "Is-A" Тест действителен для всей цепочки (WidgetRepository Is-A BaseRepository Is-A NHRepository).

EditЯ должен был упомянуть, ради аргумента, что класс A является классом API вне нашего контроля. В противном случае проблема становится значительно проще.

Ответы на вопрос(10)

Ваш ответ на вопрос