Teilen über


Unterschiede zwischen Shadowing und Überschreiben (Visual Basic)

Wenn Sie eine Klasse definieren, die von einer Basisklasse erbt, möchten Sie manchmal eins 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. Es bestehen allerdings erhebliche Unterschiede zwischen den beiden.

In der folgenden Tabelle wird Shadowing mit Überschreiben verglichen.

Ort des Vergleichs Shadowing Überschreiben
Zweck Schützt vor einer nachfolgenden Änderung der Basisklasse, die einen Member einführt, das Sie bereits in Ihrer abgeleiteten Klasse definiert haben. Erzielt Polymorphie durch Definieren einer anderen Implementierung einer Prozedur oder Eigenschaft mit derselben Aufruffolge1
Neu definiertes Element Jeder deklarierte Elementtyp Nur eine Prozedur (Function, Sub oder Operator) oder Eigenschaft
Neu definierendes Element Jeder deklarierte Elementtyp Nur eine Prozedur oder Eigenschaft mit der identischen Aufruffolge1
Zugriffsebene des neu definierenden Elements Jede Zugriffsebene Kann die Zugriffsebene des überschriebenen Elements nicht ändern
Lesbarkeit und Schreibbarkeit des neu definierenden Elements Jede Kombination Kann die Lesbarkeit oder Schreibbarkeit der überschriebenen Eigenschaft nicht ändern
Kontrolle über das Neudefinieren 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 Basisklasse; Overrides erforderlich in abgeleiteter Klasse
Vererbung des neu definierenden Elements durch Klassen, die von Ihrer abgeleiteten Klasse abgeleitet werden Shadowing durchführendes Element geerbt von weiter abgeleiteten Klassen; dem Shadowing unterzogenes Element weiterhin ausgeblendet3 Überschreibendes Element geerbt von weiter abgeleiteten Klassen; überschriebenes Element weiterhin überschrieben/außer Kraft gesetzt

1 Die Aufruffolge besteht aus dem Elementtyp (Function, Sub, Operator oder 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, Sub oder Operator) nicht mit einer anderen Art überschreiben.

2 Wenn Sie weder Shadows noch Overrides angeben, gibt der Compiler eine Warnmeldung aus, damit Sie sicher sein können, welche Art von Neudefinition Sie verwenden möchten. Wenn Sie die Warnung ignorieren, wird der Shadowingmechanismus verwendet.

3 Wenn in einer weiter abgeleiteten Klasse nicht auf das das Shadowing durchführende Element zugegriffen werden kann, wird das Shadowing nicht vererbt. Wenn Sie beispielsweise das das Shadowing durchführende Element als Private deklarieren, erbt eine von Ihrer abgeleiteten Klasse abgeleitete Klasse das ursprüngliche Element anstelle des das Shadowing durchführenden Elements.

Richtlinien

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 identische Aufruffolge erzwingt.

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

  • Sie gehen davon aus, dass Ihre Basisklasse geändert und ein Element mit demselben Namen wie dem Ihres Elements definiert werden könnte.

  • Sie möchten die Freiheit haben, den Elementtyp oder die Aufruffolge ändern zu können.

Siehe auch