Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque vous appliquez le sealed modificateur à une classe, il empêche d’autres classes d’hériter de cette classe. Dans l’exemple suivant, la classe B hérite de la classe A, mais aucune classe ne peut hériter de la classe B.
class A {}
sealed class B : A {}
Vous pouvez également utiliser le modificateur sealed sur une méthode ou une propriété qui remplace une méthode virtuelle ou une propriété dans une classe de base. À l’aide de cette approche, vous pouvez permettre aux développeurs de dériver des classes de votre classe tout en les empêchant de remplacer des méthodes ou des propriétés virtuelles spécifiques.
La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.
La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.
Conseil / Astuce
Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.
Dans l’exemple suivant, Z hérite mais YZ ne peut pas remplacer la fonction F virtuelle déclarée dans X et scellée Y.
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
Lorsque vous définissez de nouvelles méthodes ou propriétés dans une classe, vous pouvez empêcher les classes dérivées de les substituer en ne les déclarant pas comme virtuelles.
Lorsque vous remplacez un virtual membre déclaré dans un type de base, vous pouvez empêcher la substitution de types à l’aide du sealed mot clé, comme illustré dans l’exemple suivant :
public sealed override string ToString() => Value;
Il s’agit d’une erreur d’utilisation du modificateur abstrait avec une classe sealed, car une classe abstraite doit être héritée par une classe qui fournit une implémentation des méthodes ou propriétés abstraites.
Lorsque vous appliquez le sealed modificateur à une méthode ou à une propriété, utilisez-le toujours avec remplacement.
Étant donné que les structs sont implicitement scellés, vous ne pouvez pas hériter d’eux.
Pour plus d’informations, consultez Héritage.
Pour plus d’exemples, consultez Classes abstraites et scellées et Membres de classe.
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
Dans l’exemple précédent, vous pouvez essayer d’hériter de la classe sealed à l’aide de l’instruction suivante :
class MyDerivedC: SealedClass {} // Error
Le résultat est un message d’erreur :
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Pour déterminer s’il faut sceller une classe, une méthode ou une propriété, tenez généralement compte des deux points suivants :
- Les avantages potentiels dont les classes dérivées peuvent bénéficier grâce à la possibilité de personnaliser votre classe.
- Le potentiel de dérivation des classes peut modifier vos classes de telle sorte qu’elles ne fonctionnent plus correctement ou comme prévu.
Spécification du langage C#
Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source définitive de la syntaxe C# et de l’utilisation.