Partager via


Classes abstraites et scellées et membres de classe (Guide de programmation C#)

Le mot clé abstrait vous permet de créer des classes et des membres de classe 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 ont été marqués précédemment comme virtuels.

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:

public abstract class A
{
    // Class members here.
}

Une classe abstraite ne peut pas être instanciée. L’objectif d’une classe abstraite est de fournir une définition commune d’une classe de base que plusieurs classes dérivées peuvent partager. Par exemple, une bibliothèque de classes peut définir une classe abstraite utilisée comme paramètre pour la plupart de ses fonctions et exiger des programmeurs utilisant cette bibliothèque pour 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:

public abstract class A
{
    public abstract void DoWork(int i);
}

Les méthodes abstraites n’ont pas d’implémentation. Par conséquent, 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 remplacer la méthode virtuelle par une méthode abstraite. Par exemple:

// compile with: -target:library
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

Si une virtual méthode est déclarée abstract, elle est toujours virtuelle pour n’importe quelle classe hérite 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 la classe D. De cette façon, 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 scellées en plaçant le mot clé sealed avant la définition de classe. Par exemple:

public sealed class D
{
    // Class members here.
}

Une classe scellée ne peut pas être utilisée comme classe de base. Pour cette raison, il ne peut pas également s’agir d’une classe abstraite. Les classes scellées empêchent la dérivation. Étant donné qu'elles ne peuvent jamais être utilisées comme classe de base, certaines optimisations au moment de l'exécution peuvent rendre l'appel aux membres de classe scellée légèrement plus rapide.

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 annule l’aspect virtuel du membre pour toute autre classe dérivée. Pour ce faire, placez le sealed mot clé avant le mot clé de remplacement dans la déclaration de membre de classe. Par exemple:

public class D : C
{
    public sealed override void DoWork() { }
}

Voir aussi