class / struct

Références

L'actualité

Librairie

L'information

class abstract / sealed

Le mot clé abstract vous permet de créer des classes et des membres de class qui sont incomplets et doivent être implémentés dans une classe dérivée.

Le mot clé sealed vous permet d'empêcher l'héritage d'une classe ou de certains membres de classe qui étaient précédemment marqués comme virtual.

Classes abstraites et membres de classe

Les classes peuvent être déclarées comme abstraites en plaçant le mot clé abstract avant la définition de classe. Par exemple :

Une classe abstraite ne peut pas être instanciée. Le but d'une classe abstraite est de fournir une définition commune d'une classe de base pouvant être partagée par plusieurs classes dérivées. Par exemple, une bibliothèque de classes peut définir une classe abstraite qui est utilisée comme un paramètre pour beaucoup de ses fonctions, et exiger des programmeurs qui l'utilisent de fournir leur propre implémentation de la classe en créant une classe dérivée.

Les classes abstraites peuvent également définir des méthodes abstraites. Pour ce faire, ajoutez le mot clé abstract avant le type de retour de la méthode. Par exemple :

Les méthodes abstraites n'ont pas d'implémentation. Ainsi, la définition de la méthode est suivie d'un point-virgule au lieu d'un bloc de méthode normal. Les classes dérivées de la classe abstraite doivent implémenter toutes les méthodes abstraites. Lorsqu'une classe abstraite hérite d'une méthode virtuelle d'une classe de base, la classe abstraite peut substituer la méthode virtuelle par une méthode abstraite. Par exemple :

Si une méthode virtual est déclarée abstract, elle demeure virtuelle pour toutes les classes qui héritent de la classe abstraite. Une classe qui hérite d'une méthode abstraite ne peut pas accéder à l'implémentation d'origine de la méthode. Dans l'exemple précédent, DoWork sur la classe F ne peut pas appeler DoWork sur la classe D. De cette manière, une classe abstraite peut forcer les classes dérivées à fournir de nouvelles implémentations de méthode pour les méthodes virtuelles.

Classes sealed et membres de classe

Les classes peuvent être déclarées comme sealed en plaçant le mot clé sealed avant la définition de classe. Par exemple :

Une classe sealed ne peut pas être utilisée comme une classe de base. Pour cette raison, elle ne peut pas également être une classe abstraite. Les classes sealed empêchent la dérivation. étant donné qu'elles ne peuvent pas être utilisées comme une classe de base, quelques optimisations au moment de l'exécution permettent d'accélérer un peu les appels aux membres des classes sealed.

Une méthode, un indexeur, une propriété ou un événement sur une classe dérivée qui substitue un membre virtuel de la classe de base peut déclarer ce membre comme sealed. Cela nie l'aspect virtuel du membre pour toute classe dérivée ultérieure. Pour ce faire, mettez le mot clé sealed avant le mot clé override dans la déclaration de membre de classe. Par exemple :

Définir des propriétés abstraites

L'exemple suivant montre comment définir des propriétés abstract. Une déclaration de propriété abstraite ne fournit pas une implémentation des accesseurs de propriété ; elle déclare que la classe prend en charge des propriétés, mais laisse l'implémentation de l'accesseur aux classes dérivées. L'exemple suivant montre comment implémenter les propriétés abstraites héritées d'une classe de base.

Cet exemple se compose de trois fichiers, chacun étant compilé individuellement, et l'assembly obtenu est référencé par la compilation suivante :

  • abstractshape.cs : classe Shape qui contient une propriété Area abstraite.
  • shapes.cs : sous-classes de la classe Shape.
  • shapetest.cs : programme de test destiné à afficher les zones de certains objets dérivés de Shape.

Pour compiler l'exemple, utilisez la commande suivante :

csc abstractshape.cs shapes.cs shapetest.cs

Cette commande crée le fichier exécutable shapetest.exe.

Exemple

Ce fichier déclare la classe Shape qui contient la propriété Area du type double.

Les modificateurs sur la propriété sont placés sur la déclaration de propriété proprement dite. Par exemple :

Quand vous déclarez une propriété abstraite (telle que Area dans cet exemple), vous indiquez simplement quels les accesseurs de propriété sont disponibles, mais vous ne les implémentez pas. Dans cet exemple, seul un accesseur get est disponible, donc la propriété est en lecture seule.

Le code suivant présente trois sous-classes de Shape et indique comment elles substituent la propriété Area pour fournir leur propre implémentation.

Le code suivant montre un programme de test qui crée un certain nombre d'objets dérivés de Shape et imprime les zones correspondantes.