Partager via


Différences entre l'occultation et la substitution (Visual Basic)

Lorsque vous définissez une classe qui hérite d'une classe de base, vous souhaitez parfois redéfinir un ou plusieurs des éléments de classe de base dans la classe dérivée.L'occultation et la substitution sont disponibles à cette fin.

Comparaison

Les mécanismes d'occultation et de substitution sont tous deux utilisés lorsqu'une classe dérivée hérite d'une classe de base et redéfinissent un élément déclaré par un autre.Il existe toutefois des différences notables entre l'occultation et la substitution.

Le tableau suivant compare l'occultation à la substitution.

Point de comparaison

Occultation

Substitution

Objectif

Protège contre une modification de classe de base suivante qui introduit un membre déjà défini dans votre classe dérivée

Atteint le polymorphisme en définissant une implémentation différente d'une procédure ou d'une propriété avec la même séquence d'appel 1

Élément redéfini

Tout type d'élément déclaré

Seulement une procédure (Function, Sub ou Operator) ou une propriété

Élément redéfinissant

Tout type d'élément déclaré

Seulement une procédure ou une propriété avec une séquence d'appel identique1

Niveau d'accès de l'élément redéfinissant

N'importe quel niveau d'accès

Impossible de modifier le niveau d'accès de l'élément substitué

Lisibilité et accessibilité en écriture de l'élément redéfinissant

Toute combinaison

Ne peut pas modifier la lisibilité et la facilité d'écriture de la propriété substituée

Contrôle sur la redéfinition

L'élément de classe de base ne peut pas appliquer ou interdire l'occultation

L'élément de classe de base peut spécifier MustOverride, NotOverridable ou Overridable

Utilisation de mot clé

Shadows recommandé dans la classe dérivée ; Shadows supposé lorsque ni Shadows ni Overrides ne sont spécifiés2

Overridable ou MustOverride requis dans la classe de base ; Overrides requis dans la classe dérivée

Héritage d'élément redéfinissant par des classes dérivant de votre classe dérivée

Élément occultant hérité par des classes plus dérivées ; élément occulté toujours masqué3

Élément substituant hérité par des classes plus dérivées ; élément substitué toujours substitué

1 La séquence d'appel se compose du type d'élément (Function, Sub, Operator ou Property), du nom, de la liste d'arguments et du type de retour.Vous ne pouvez pas substituer une procédure par une propriété, ou vice versa.Vous ne pouvez pas substituer un genre de procédure (Function, Sub ou Operator) par un autre genre.

2 Si vous ne spécifiez pas Shadows ou Overrides, le compilateur signale un message d'avertissement pour vous aider à vérifier le genre de redéfinition que vous souhaitez utiliser.Si vous ignorez l'avertissement, le mécanisme d'occultation est utilisé.

3 Si l'élément occultant est inaccessible dans une classe plus dérivée, l'occultation n'est pas héritée.Par exemple, si vous déclarez l'élément occultant comme Private, une classe dérivant de votre classe dérivée hérite de l'élément d'origine et non de l'élément occultant.

Indications

Vous utilisez normalement la substitution dans les cas suivants :

  • Vous définissez des classes dérivées polymorphes.

  • Vous souhaitez la sécurité du compilateur qui applique le type d'élément et la séquence d'appel identiques.

Vous utilisez normalement l'occultation dans les cas suivants :

  • Vous savez que votre classe de base peut être modifiée et peut définir un élément à l'aide du même nom que le vôtre.

  • Vous souhaitez pouvoir modifier le type d'élément ou la séquence d'appel.

Voir aussi

Tâches

Comment : masquer une variable portant le même nom que votre variable (Visual Basic)

Comment : masquer une variable héritée (Visual Basic)

Comment : accéder à une variable masquée par une classe dérivée (Visual Basic)

Référence

Shadows (Visual Basic)

Overrides (Visual Basic)

Concepts

Références aux éléments déclarés (Visual Basic)

Occultation dans Visual Basic