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.
Configuration requise
Option du compilateur : /ZW
Common Language Runtime
(Aucune note de cette fonctionnalité de langage ne s'applique qu'au Common Language Runtime.)
Configuration requise
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 {}
};