Wie kann ich die Methoden einer Basisklasse in C # verbergen (entfernen)? [Duplikat]

Diese Frage hat hier bereits eine Antwort:

Können öffentlich geerbte Methoden ausgeblendet werden (z. B. privat für abgeleitete Klasse) 10 Antworten

Die Essenz des Problems ist, wenn eine Klassenhierarchie wie diese gegeben ist:

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

Wie kann ich verhindern, dass Klassen, die von Klasse "B" erben, die Methode sehenA.MethodToHide()? In C ++ war dies mit einer Deklaration wieclass B : private A, aber diese Syntax ist in C # nicht gültig.

Für Interessierte (oder sich fragen, was ich binJa wirklich Wir versuchen, einen Wrapper für Rhino.Commons.NHRepository zu erstellen, der die Methoden verbirgt, die wir unserer Gruppe von Entwicklern nicht zur Verfügung stellen möchten Entwicklung unserer App, der neue Entwickler leicht folgen können. Also ja, ich glaube, der "Is-A" -Test ist für die gesamte Kette gültig (WidgetRepository Is-A BaseRepository Is-A NHRepository).

Bearbeiten: Ich hätte der Argumentation halber erwähnen sollen, dass Klasse A eine API-Klasse ist, die außerhalb unserer Kontrolle liegt. Ansonsten wird das Problem erheblich einfacher.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage