Événements
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Lorsqu’il est appliqué à une classe, le modificateur sealed
empêche les autres classes d’hériter de celle-ci. 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. Cela vous permet d’autoriser les classes à dériver de votre classe et à les empêcher de remplacer des méthodes ou des propriétés virtuelles spécifiques.
Dans l’exemple suivant, Z
hérite de Y
, mais Z
ne peut pas remplacer la fonction virtuelle F
déclarée dans X
et scellée dans 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 membre virtual
déclaré dans un type de base, vous pouvez empêcher les types dérivés de les remplacer en utilisant le mot-clé sealed, comme dans l'exemple suivant :
public sealed override string ToString() => Value;
Il s’agit d’une erreur d’utiliser le modificateur abstrait avec une classe scellée, 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.
Lorsqu’il est appliqué à une méthode ou à une propriété, le modificateur sealed
doit toujours être utilisé avec remplacer.
Étant donné que les structs sont implicitement scellés, ils ne peuvent pas être hérités.
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é, vous devez généralement prendre en compte les 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 risque que des classes dérivées puissent modifier vos classes d'une manière telle qu'elles ne fonctionnent plus correctement ou comme prévu.
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.
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événements
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenant