c # abstrakte Methoden: intern öffentlich und virtuell?

7

Sind abstrakte Methoden intern öffentlich und virtuell in c #?

?

Alle Methoden sind standardmäßig privat, und wenn eine abstrakte Methode privat ist, steht sie der abgeleiteten Klasse nicht zur Verfügung und führt zum Fehler "virtual or abstract members cannot be private"

    
NoviceToDotNet 22.10.2010, 11:45
quelle

5 Antworten

11

Ich denke, Sie stellen eine andere Frage, als die meisten Leute denken (mit anderen Worten, es scheint, als ob Sie verstehen, was abstract bedeutet).

Sie können keine private abstrakte Methode deklarieren - der Compiler gibt einen Fehler aus. Diese beiden Klassen werden nicht kompiliert:

%Vor%

Der Compiler verhindert, dass Sie eine nutzlose Methode deklarieren, da ein privates abstraktes Member in einer abgeleiteten Klasse nicht verwendet werden kann und keine Implementierung (und daher keine Verwendung) für die deklarierende Klasse hat.

Es ist wichtig zu beachten, dass der Standardzugriffsmodifikator, der vom Compiler auf ein abstraktes Member angewendet wird (wenn Sie selbst keinen angeben) immer noch private ist, genauso wie es wäre, wenn die Methode nicht abstrakt wäre.

    
Andrew Hare 22.10.2010, 12:01
quelle
4

Abstract ist nur eine Art zu sagen: "Ich bin hier, aber niemand hat mir gesagt, was ich noch machen werde." Und da niemand dieses Mitglied implementiert hat, muss jemand das tun. Um das zu tun, müssen Sie diese Klasse erben und dieses Mitglied überschreiben.

Um etwas überschreiben zu können, muss es entweder abstrakt oder virtuell deklariert werden und zumindest für den Erben zugänglich sein. muss als geschützt, intern oder öffentlich gekennzeichnet sein.

    
Onkelborg 22.10.2010 11:51
quelle
2

Abstrakte Methoden können nicht privat sein und sind virtuell. Sie müssen zumindest geschützt sein.

    
phreak3eb 22.10.2010 11:49
quelle
2

Aufgrund von Jon Skeets Argument hier ( What are die Standardzugriffsmodifikatoren in C #? )

  

Der Standardzugriff für alles in C # ist "der am meisten eingeschränkte Zugriff, den Sie für dieses Mitglied deklarieren könnten"

Es muss "geschützt" sein

Wie von Pieter angegeben, ist der Standardwert immer privat, also:

%Vor%

Gibt Compilerfehler

  

virtuelle oder abstrakte Mitglieder können nicht privat sein

    
veggerby 22.10.2010 11:58
quelle
1

Eine abstrakte Methode ist virtuell, aber sie kann öffentlich oder geschützt sein. (technisch könnte es auch intern sein, aber ich habe noch nie einen solchen Fall getroffen)

    
vc 74 22.10.2010 11:49
quelle