Jak ukryć (usunąć) metody klasy bazowej w C #? [duplikować]

To pytanie ma już tutaj odpowiedź:

C # - Czy ukryte mogą być metody dziedziczone publicznie (np. Prywatne dla klasy pochodnej) 10 odpowiedzi

Istota problemu polega na takiej hierarchii klas:

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

Jak mogę uniemożliwić dowolnej klasie, która dziedziczy po klasie „B”, zobaczenie tej metodyA.MethodToHide()? W C ++ było to dość łatwe, używając deklaracji, takich jakclass B : private A, ale ta składnia nie jest poprawna w C #.

Dla zainteresowanych (lub zastanawiając się, czym jestemnaprawdę próbujemy to zrobić), staramy się stworzyć opakowanie dla Rhino.Commons.NHRepository, które ukrywa metody, których nie chcemy ujawniać naszej grupie programistów, abyśmy mogli mieć ciekawy sposób rozwijanie naszej aplikacji, którą nowi programiści mogą łatwo śledzić. Tak, wierzę, że test „Is-A” obowiązuje dla całego łańcucha (WidgetRepository Is-A BaseRepository Is-A NHRepository).

Edytować: Powinienem był wspomnieć, ze względu na argument, że klasa A jest klasą API poza naszą kontrolą. W przeciwnym razie problem staje się znacznie łatwiejszy.

questionAnswers(10)

yourAnswerToTheQuestion