Classes abstract et sealed et membres de classe (Guide de programmation C#)Abstract and Sealed Classes and Class Members (C# Programming Guide)

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.The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class.

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.The sealed keyword enables you to prevent the inheritance of a class or certain class members that were previously marked virtual.

Classes abstraites et membres de classeAbstract Classes and Class Members

Les classes peuvent être déclarées comme abstraites en plaçant le mot clé abstract avant la définition de classe.Classes can be declared as abstract by putting the keyword abstract before the class definition. Par exemple :For example:

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

Une classe abstraite ne peut pas être instanciée.An abstract class cannot be instantiated. 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.The purpose of an abstract class is to provide a common definition of a base class that multiple derived classes can share. 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.For example, a class library may define an abstract class that is used as a parameter to many of its functions, and require programmers using that library to provide their own implementation of the class by creating a derived class.

Les classes abstraites peuvent également définir des méthodes abstraites.Abstract classes may also define abstract methods. Pour ce faire, ajoutez le mot clé abstract avant le type de retour de la méthode.This is accomplished by adding the keyword abstract before the return type of the method. Par exemple :For example:

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

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.Abstract methods have no implementation, so the method definition is followed by a semicolon instead of a normal method block. Les classes dérivées de la classe abstraite doivent implémenter toutes les méthodes abstraites.Derived classes of the abstract class must implement all abstract methods. 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.When an abstract class inherits a virtual method from a base class, the abstract class can override the virtual method with an abstract method. Par exemple :For example:

// 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 méthode virtual est déclarée abstract, elle demeure virtuelle pour toutes les classes qui héritent de la classe abstraite.If a virtual method is declared abstract, it is still virtual to any class inheriting from the abstract class. 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.A class inheriting an abstract method cannot access the original implementation of the method—in the previous example, DoWork on class F cannot call DoWork on class D. In this way, an abstract class can force derived classes to provide new method implementations for virtual methods.

Classes sealed et membres de classeSealed Classes and Class Members

Les classes peuvent être déclarées comme sealed en plaçant le mot clé sealed avant la définition de classe.Classes can be declared as sealed by putting the keyword sealed before the class definition. Par exemple :For example:

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

Une classe sealed ne peut pas être utilisée comme une classe de base.A sealed class cannot be used as a base class. Pour cette raison, elle ne peut pas également être une classe abstraite.For this reason, it cannot also be an abstract class. Les classes sealed empêchent la dérivation.Sealed classes prevent derivation. É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.Because they can never be used as a base class, some run-time optimizations can make calling sealed class members slightly faster.

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.A method, indexer, property, or event, on a derived class that is overriding a virtual member of the base class can declare that member as sealed. Cela nie l'aspect virtuel du membre pour toute classe dérivée ultérieure.This negates the virtual aspect of the member for any further derived class. Pour ce faire, mettez le mot clé sealed avant le mot clé override dans la déclaration de membre de classe.This is accomplished by putting the sealed keyword before the override keyword in the class member declaration. Par exemple :For example:

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

Voir aussiSee also