Partager via


sealed (extensions du composant C++)

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

Notes

Le langage standard ISO C ++ 11 contient le mot clé final qui est pris en charge dans Visual Studio.Utilisez final sur les classes standard et sealed sur les classes ref.

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.

Le mot clé sealed est valide pour les cibles natives et également pour Windows Runtime et le Common Language Runtime (CLR). Pour plus d'informations, voir 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, voir Prise en charge du compilateur des caractéristiques de type.

sealed est un mot clé contextuel. Pour plus d'informations, voir mots clés contextuels.

Windows Runtime

Voir Classes et structures de référence (C++/CX).

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

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

Fonctionnalités de langage pour cibler le CLR