Partage via


sealed (C++/CLI et C++/CX)

sealed est un mot clé contextuel pour les classes de référence qui indique qu’un membre virtuel ne peut pas être remplacé ou qu’un type ne peut pas être utilisé comme type de base.

Remarque

Le langage standard ISO C++11 introduit le mot clé final. Utilisez final sur les classes standard et sealed sur les classes de référence.

Tous les runtimes

Syntaxe

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

Paramètres

identifier
Nom de la fonction ou de la classe.

return-type
Type retourné par une fonction.

Notes

Dans le premier exemple de syntaxe, une classe est sealed. Dans le deuxième exemple, une fonction virtuelle est sealed.

Utilisez le mot clé sealed pour les classes de référence et leurs fonctions membres virtuelles. Pour plus d’informations, consultez Spécificateurs de substitution et compilations natives.

Vous pouvez détecter au moment de la compilation si un type est sealed à l’aide de la caractéristique de type __is_sealed(type). Pour plus d’informations, consultez Compiler Support for Type Traits (Prise en charge du compilateur pour les caractéristiques de type).

sealed est un mot clé contextuel. Pour plus d’informations, consultez Mots clés contextuels.

Windows Runtime

Consultez Classes et structures de référence.

Spécifications

Option du compilateur : /ZW

Common Language Runtime

(Aucune note de cette fonctionnalité de langage ne s’applique qu’au Common Language Runtime.)

Spécifications

Option du compilateur : /clr

Exemples

L’exemple de code suivant montre l’effet de sealed sur un membre virtuel.

// sealed_keyword.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
   virtual void g();
};

ref class X : I1 {
public:
   virtual void f() {
      System::Console::WriteLine("X::f override of I1::f");
   }

   virtual void g() sealed {
      System::Console::WriteLine("X::f override of I1::g");
   }
};

ref class Y : public X {
public:
   virtual void f() override {
      System::Console::WriteLine("Y::f override of I1::f");
   }

   /*
   // the following override generates a compiler error
   virtual void g() override {
      System::Console::WriteLine("Y::g override of I1::g");
   }
   */
};

int main() {
   I1 ^ MyI = gcnew X;
   MyI -> f();
   MyI -> g();

   I1 ^ MyI2 = gcnew Y;
   MyI2 -> f();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::f

L'exemple de code suivant montre comment marquer une classe comme sealed.

// sealed_keyword_2.cpp
// compile with: /clr
interface struct I1 {
   virtual void f();
};

ref class X sealed : I1 {
public:
   virtual void f() override {}
};

ref class Y : public X {   // C3246 base class X is sealed
public:
   virtual void f() override {}
};

Voir aussi

Extensions de composants pour .NET et UWP