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
- References to Declared Elements
- Shadowing in Visual Basic
- Vorgehensweise: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable
- Vorgehensweise: Ausblenden einer geerbten Variablen
- Vorgehensweise: Zugreifen auf eine Variable, die von einer abgeleiteten Klasse ausgeblendet wird
- Schatten
- Überschreibt