Frage

Warum folgende Programm druckt

B
B

(wie es sein sollte)

public class A
    {
        public void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public new void Print()
        {
            Console.WriteLine("B");
        }

        public void Print2()
        {
            Print();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var b = new B();
            b.Print();
            b.Print2();
        }
    }

aber wenn wir entfernen Stichwort 'public' in der Klasse B wie folgt:

    new void Print()
    {
        Console.WriteLine("B");
    }

es beginnt das Drucken

A
B

War es hilfreich?

Lösung

Wenn Sie den public Zugriffsmodifikator entfernen, entfernen Sie jede Fähigkeit B new Print() Methode aus der Main Funktion zu nennen, weil es jetzt standardmäßig private. Es ist nicht mehr zugänglich Main.

Die einzige verbleibende Option ist zurück auf das Verfahren von A geerbt fallen, so dass die einzige zugängliche Implementierung ist. Wenn Sie anrufen Drucke sind () aus einer anderen B-Methode würden Sie die B Implementierung bekommen, weil die Mitglieder von B die privaten Implementierung sehen würden.

Andere Tipps

Sie machen die Print Methode private, so die einzige verfügbare Print Methode ist die geerbte.

Von außen ist die neue B.Print () - Methode ist nicht mehr sichtbar, so A.Print () aufgerufen wird

.

Innerhalb der Klasse, aber die neue B.Print-Methode noch sichtbar ist, so dass die eine, die durch Verfahren in der gleichen Klasse aufgerufen wird.

Wenn Sie das Schlüsselwort public aus der Klasse b entfernen, wird die neuen Druckverfahren sind nicht mehr außerhalb der Klasse zur Verfügung, und so, wenn Sie b.print von Ihrem Hauptprogramm zu tun, es macht tatsächlich einen Aufruf an die öffentlichen Methode in A (da b erbt ein und hat nach wie vor Druck als öffentlich)

Ohne das Schlüsselwort public dann die Methode privat ist, kann daher nicht von Main () aufgerufen werden.

Doch die Print2 () -Methode kann es nennen, wie es andere Methoden der eigenen Klasse sehen, auch wenn privat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top