Partager via


sealed (extensions du composant C++)

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

[!REMARQUE]

Le langage standard ISO C++11 a le mot clé final, qui est pris en charge dans Visual Studio.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

  • identificateur
    Nom de la fonction ou de la classe.

  • type-retour
    Type retourné par une fonction.

Remarques

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

Le mot clé sealed est valide pour les cibles natives, et également pour Windows Runtime et Common Language Runtime (CLR).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 du trait de type __is_sealed (type).Pour plus d'informations, consultez Prise en charge du compilateur pour les Type Traits (extensions du composant C++).

sealed est un mot clé contextuel.Pour plus d'informations, consultez Mots clés contextuels (extensions du composant C++).

Windows Runtime

Consultez Classes et structures de référence.

0w2w91tf.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /ZW

Common Language Runtime

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

0w2w91tf.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /clr

0w2w91tf.collapse_all(fr-fr,VS.110).gifExemples

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();
}

Sortie

  
  
  

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

Concepts

Extensions de composant pour les plateformes Runtime