Freigeben über


Unterschiede zwischen Überschatten und Überschreiben (Visual Basic)

Wenn Sie eine Klasse definieren, die von einer Basisklasse erbt, möchten Sie manchmal ein oder mehrere der Basisklassenelemente in der abgeleiteten Klasse neu definieren. Für diesen Zweck stehen sowohl Shadowing als auch Überschreiben zur Verfügung.

Vergleich

Shadowing und Überschreiben werden beide verwendet, wenn eine abgeleitete Klasse von einer Basisklasse erbt, und beide definieren ein deklariertes Element mit einem anderen neu. Aber es gibt erhebliche Unterschiede zwischen den beiden.

In der folgenden Tabelle wird Shadowing mit Überschreiben verglichen.

Vergleichspunkt Beschattung Überschreiben
Zweck Schützt vor einer nachfolgenden Änderung der Basisklasse, die ein Element einführt, das Sie bereits in Ihrer abgeleiteten Klasse definiert haben. Erreicht Polymorphismus durch Definieren einer anderen Implementierung einer Prozedur oder Eigenschaft mit derselben Aufrufsequenz1
Neu definiertes Element Jeder deklarierte Elementtyp Nur eine Prozedur (Function, Suboder Operator) oder Eigenschaft
Neudefinition eines Elements Jeder deklarierte Elementtyp Nur eine Prozedur oder Eigenschaft mit identischer Aufrufsequenz1
Zugriffsebene des neu definierten Elements Jede Zugriffsebene Zugriffsebene des außerkraftsetzungselements kann nicht geändert werden
Lesbarkeit und Schreibbarkeit des neu definierten Elements Beliebige Kombination Kann die Lesbarkeit oder Schreibbarkeit der überschriebenen Eigenschaft nicht ändern
Kontrolle über die Neudefinition Das Basisklassenelement kann Shadowing nicht erzwingen oder untersagen Basisklassenelement kann MustOverride, NotOverridable oder Overridable angeben.
Schlüsselwortverwendung Shadows empfohlen in abgeleiteter Klasse; Shadows angenommen, wenn weder Shadows noch Overrides angegeben ist2 Overridable oder MustOverride erforderlich in der Basisklasse; Overrides erforderlich in abgeleiteter Klasse
Vererbung des neu definierten Elements durch Klassen, die von Ihrer abgeleiteten Klasse abstammen Überschattendes Element, das von weiteren abgeleiteten Klassen geerbt wird; überschattetes Element weiterhin verborgen3 Überschreibendes Element, das von weiteren abgeleiteten Klassen geerbt wird; überschriebenes Element bleibt überschrieben.

1 Die aufrufende Sequenz besteht aus dem Elementtyp (Function, Sub, , Operatoroder Property), dem Namen, der Parameterliste und dem Rückgabetyp. Sie können eine Prozedur nicht mit einer Eigenschaft oder umgekehrt überschreiben. Sie können eine Art von Prozedur (Function, Suboder Operator) nicht mit einer anderen Art überschreiben.

2 Wenn Sie weder Shadows noch Overrides angeben, gibt der Compiler eine Warnmeldung aus, die Ihnen hilft, zu entscheiden, welche Art von Neudefinition Sie verwenden möchten. Wenn Sie die Warnung ignorieren, wird der Schattenmechanismus verwendet.

3 Wenn auf das Schattenelement in einer weiteren abgeleiteten Klasse nicht zugegriffen werden kann, wird die Schattenung nicht geerbt. Wenn Sie z. B. das Schattenelement als Privatedeklarieren, erbt eine von der abgeleiteten Klasse abgeleitete Klasse das ursprüngliche Element anstelle des Schattenelements.

Leitlinien

In der Regel verwenden Sie Überschreiben in den folgenden Fällen:

  • Sie definieren polymorphe abgeleitete Klassen.

  • Sie möchten die Sicherheit haben, dass der Compiler den identischen Elementtyp und die Aufrufreihenfolge erzwingt.

Normalerweise verwenden Sie Schatten in den folgenden Fällen:

  • Sie gehen davon aus, dass Ihre Basisklasse möglicherweise geändert und ein Element mit demselben Namen wie Ihre definiert wird.

  • Sie möchten die Freiheit, den Elementtyp oder die Aufrufsequenz zu ändern.

Siehe auch