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. Schaduw 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 | Schaduw | 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 gedeclareerd elementtype | Alleen een procedure (Function , Sub of Operator ) of eigenschap |
Element opnieuw definiëren | Elk gedeclareerd 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 |
Controle over opnieuw definiëren | Het basisklasse-element kan schaduw niet afdwingen of verbieden | Het basisklasse-element kan opgeven MustOverride , NotOverridable of Overridable |
Trefwoordgebruik | Shadows aanbevolen in afgeleide klasse; Shadows ervan uitgegaan als noch Overrides Shadows opgegeven2 |
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 het element dat wordt overgenomen door verdere afgeleide klassen; overschreven element wordt nog steeds overschreven |
1 De aanroepende reeks bestaat uit het elementtype (Function
, Sub
, Operator
of Property
), naam, parameterlijst en retourtype. U kunt een procedure met een eigenschap of andersom niet overschrijven. U kunt het ene type procedure (Function
, Sub
of ) niet Operator
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
Normaal gesproken gebruikt u overschrijven in de volgende gevallen:
U definieert polymorfe afgeleide klassen.
U wilt dat de compiler het identieke elementtype en de aanroepvolgorde afdwingt.
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.