Was ist der Unterschied zwischen einer nicht virtuellen Methode und einer versiegelten Methode?

8

Ich habe eine Verwirrung, die ich auflösen möchte. In C # können nur Basisklassenmethoden mit dem virtual -Tag in abgeleiteten Klassen überschrieben werden. Basisklassenmethoden ohne das virtual -Tag können nicht überschrieben werden. Im besten Fall können abgeleitete Klassen Basisklassenmethoden mit new ausblenden. Dann haben wir sealed Methoden, die auch nicht in Basisklassen überschrieben werden können.

Was ist also der Unterschied zwischen einer versiegelten Methode und einer nicht-virtuellen Standardmethode?

Eine weitere verwandte Frage. Kann die Basisklasse sealed -Methoden in abgeleiteten Klassen mit new ?

ersetzt werden?     
Ahmad 26.02.2014, 15:30
quelle

3 Antworten

12

sealed verhindert ein weiteres Überschreiben der virtuellen Methoden in der Kette. Sie können sealed nur für Methoden definieren, die überschrieben werden. Sehen Sie sich die Dokumentation für sealed an: Ссылка

Sie geben ein gutes Beispiel für eine versiegelte Verwendung:

%Vor%

In diesem Fall kann jeder, der von B ableitet, G überschreiben, aber nicht F .

    
John Koerner 26.02.2014, 15:34
quelle
2

Sealed-Methoden können nur Methoden sein, die eine Methode der Basisklasse überschreiben, sodass kein weiteres Überschreiben möglich ist.

Aus der Dokumentation:

  

Wenn eine Deklaration einer Instanzmethode einen versiegelten Modifikator enthält,   Methode soll eine versiegelte Methode sein.
  Wenn eine Instanzmethode   Die Deklaration enthält den versiegelten Modifikator, es muss auch die   überschreiben Modifikator.

Dies ist für virtuelle Methoden nicht erforderlich.

    
Decoy 26.02.2014 15:37
quelle
1

Wenn ich das richtig lese, kann mit seal das virtuelle virtuell gestoppt werden. Im Wesentlichen macht es virtuell.

    
LB2 26.02.2014 15:35
quelle

Tags und Links