Delen via


Verschillen tussen schaduw en overschrijven (Visual Basic)

Wanneer u een klasse definieert die wordt overgenomen van een basisklasse, wilt u soms een of meer basisklasse-elementen in de afgeleide klasse opnieuw definiëren. Overschaduwen en overschrijven zijn beide beschikbaar voor dit doel.

Vergelijking

Schaduwen en overschrijven worden beide gebruikt wanneer een afgeleide klasse wordt overgenomen van een basisklasse en beide het ene gedeclareerde element opnieuw definiëren met een andere. Maar er zijn aanzienlijke verschillen tussen de twee.

In de volgende tabel wordt schaduw vergeleken met overschrijven.

Vergelijkingspunt Schaduwen Dwingende
Doel Beschermt tegen een volgende basisklassewijziging die een lid introduceert dat u al hebt gedefinieerd in uw afgeleide klasse Hiermee bereikt u polymorfisme door een andere implementatie van een procedure of eigenschap te definiëren met dezelfde aanroepende reeks1
Opnieuw gedefinieerd element Elk gedefinieerd elementtype Alleen een procedure (Function, Subof Operator) of eigenschap
Element opnieuw definiëren Elk gedefinieerd elementtype Alleen een procedure of eigenschap met de identieke aanroepreeks1
Toegangsniveau van opnieuw definiëren van element Elk toegangsniveau Kan het toegangsniveau van het overschreven element niet wijzigen
Leesbaarheid en schrijfbaarheid van opnieuw definiëren van element Elke combinatie Kan de leesbaarheid of beschrijfbaarheid van de overschreven eigenschap niet wijzigen
Beheersing over het herdefiniëren Het basisklasse-element kan het overschaduwen niet afdwingen of verbieden Het basisklasse-element kan opgeven MustOverride, NotOverridableof Overridable
Trefwoordgebruik Shadows aanbevolen in afgeleide klasse; Shadows aangenomen als noch Shadows noch Overrides opgegeven 2 Overridable of MustOverride vereist in de basisklasse; Overrides vereist in afgeleide klasse
Overname van opnieuw definiëren van element door klassen die zijn afgeleid van uw afgeleide klasse Schaduwelement overgenomen door verdere afgeleide klassen; schaduwelement nog steeds verborgen3 Het overschrijven van een geërfd element door verdere afgeleide klassen; een overschreven element blijft overschreven.

1 De aanroepende reeks bestaat uit het elementtype (Function, Sub, Operatorof Property), naam, parameterlijst en retourtype. Een procedure kunt u niet met een eigenschap overschrijven, of andersom. U kunt het ene proceduretype (Function, Sub, of Operator) niet overschrijven met een ander type.

2 Als u geen van Shadows beide opgeeft of Overrides, geeft de compiler een waarschuwingsbericht om u te helpen zeker te zijn welk type herdefinitie u wilt gebruiken. Als u de waarschuwing negeert, wordt het schaduwmechanisme gebruikt.

3 Als het schaduwelement niet toegankelijk is in een andere afgeleide klasse, wordt schaduw niet overgenomen. Als u bijvoorbeeld het schaduwelement declareert als Private, neemt een klasse die is afgeleid van uw afgeleide klasse het oorspronkelijke element over in plaats van het schaduwelement.

Richtlijnen

Doorgaans gebruikt u overriden in de volgende gevallen:

  • U definieert polymorfe afgeleide klassen.

  • U wilt dat de compiler afdwingt dat het elementtype en de aanroepvolgorde identiek zijn.

Normaal gesproken gebruikt u schaduw in de volgende gevallen:

  • U verwacht dat uw basisklasse kan worden gewijzigd en definieer een element met dezelfde naam als die van u.

  • U wilt de vrijheid om het elementtype of de aanroepvolgorde te wijzigen.

Zie ook