Wie funktioniert das Ausblenden von Methoden in C #?

8

Warum das folgende Programm druckt

%Vor%

(wie es sollte)

%Vor%

Aber wenn wir das Stichwort 'public' in Klasse B wie folgt entfernen:

%Vor%

es beginnt zu drucken

%Vor%

?

    
Prankster 02.04.2009, 13:34
quelle

5 Antworten

20

Wenn Sie den Zugriffsmodifizierer public entfernen, entfernen Sie die Möglichkeit, die Methode new Print() von B von der Funktion Main aufzurufen, da sie jetzt standardmäßig auf private festgelegt ist. Es ist für Main nicht mehr zugänglich.

Die einzige verbleibende Option besteht darin, auf die von A übernommene Methode zurückzugreifen, da dies die einzige zugängliche Implementierung ist. Wenn Sie Print () innerhalb einer anderen B-Methode aufrufen würden, würden Sie die B-Implementierung erhalten, weil Mitglieder von B die private Implementierung sehen würden.

    
Joel Coehoorn 02.04.2009, 13:37
quelle
5

Sie machen die Print Methode private , also ist die einzige verfügbare Print Methode die vererbte Methode.

    
bdukes 02.04.2009 13:37
quelle
3
___ qstntxt ___

Warum das folgende Programm druckt

%Vor%

(wie es sollte)

%Vor%

Aber wenn wir das Stichwort 'public' in Klasse B wie folgt entfernen:

%Vor%

es beginnt zu drucken

%Vor%

?

    
___ answer709757 ___

Wenn Sie das Schlüsselwort public aus Klasse b entfernen, steht die neue Druckmethode außerhalb der Klasse nicht mehr zur Verfügung. Wenn Sie also b.print von Ihrem Hauptprogramm aus ausführen, wird tatsächlich die in A verfügbare öffentliche Methode aufgerufen (Weil b ein a erbt und ein still hat Als öffentlich drucken)

    
___ answer709754 ___

Sie machen die %code% Methode %code% , also ist die einzige verfügbare %code% Methode die vererbte Methode.

    
___ answer709762 ___

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

Die Print2 () -Methode kann sie jedoch aufrufen, da sie andere Methoden ihrer eigenen Klasse sehen kann, selbst wenn sie privat ist.

    
___ tag123inheritance ___ Vererbung ist das System in der objektorientierten Programmierung, das es Objekten ermöglicht, Operationen zu unterstützen, die von anterioren Typen definiert sind, ohne eine eigene Definition angeben zu müssen. Es ist der Hauptvektor für Polymorphie in der objektorientierten Programmierung. ___ qstnhdr ___ Wie funktioniert das Ausblenden von Methoden in C #? ___ tag123compilerconstruction ___ Das Tag compiler-construction sollte auf Fragen zur Programmierung von Compilern oder zu Fragen zum detaillierten Innenleben von Compilern angewendet werden. NUTZEN SIE NICHT für Fragen zum * Verwenden * spezifischer Compiler oder Kompilierungsfehler. ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer709748 ___

Wenn Sie den Zugriffsmodifizierer %code% entfernen, entfernen Sie die Möglichkeit, die Methode %code% von B von der Funktion %code% aufzurufen, da sie jetzt standardmäßig auf %code% festgelegt ist. Es ist für Main nicht mehr zugänglich.

Die einzige verbleibende Option besteht darin, auf die von A übernommene Methode zurückzugreifen, da dies die einzige zugängliche Implementierung ist. Wenn Sie Print () innerhalb einer anderen B-Methode aufrufen würden, würden Sie die B-Implementierung erhalten, weil Mitglieder von B die private Implementierung sehen würden.

    
___ tag123methodhiding ___ hilf uns dieses Wiki zu bearbeiten ___
Lennaert 02.04.2009 13:38
quelle
2

Wenn Sie das Schlüsselwort public aus Klasse b entfernen, steht die neue Druckmethode außerhalb der Klasse nicht mehr zur Verfügung. Wenn Sie also b.print von Ihrem Hauptprogramm aus ausführen, wird tatsächlich die in A verfügbare öffentliche Methode aufgerufen (Weil b ein a erbt und ein still hat Als öffentlich drucken)

    
Raj 02.04.2009 13:38
quelle
1

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

Die Print2 () -Methode kann sie jedoch aufrufen, da sie andere Methoden ihrer eigenen Klasse sehen kann, selbst wenn sie privat ist.

    
samjudson 02.04.2009 13:39
quelle