__sealed
Notes
Cette rubrique s'applique uniquement à la version 1 des extensions managées pour C++.Cette syntaxe doit être utilisée uniquement pour conserver le code de la version 1.Consultez sealed (extensions du composant C++) pour plus d'informations sur l'utilisation de la fonctionnalité équivalente dans la nouvelle syntaxe.
Empêche une méthode d'être remplacée ou une classe d'être une classe de base.
__sealed class-specifier
__sealed struct-specifier
__sealed function-declarator
Notes
Le mot clé __sealed spécifie qu'une méthode de classe ne peut pas être remplacée ou qu'une classe ne peut pas être une classe de base.
En utilisant le mot clé __sealed, conservez les points suivants à l'esprit :
Une méthode virtuelle __sealed ne peut pas être remplacée.
Si une méthode membre non virtuelle est marquée __sealed, la qualification __sealed est ignorée.
Une méthode __sealed ne peut pas être pure.
Le mot clé __sealed n'est pas autorisé en cas d'utilisation avec le mot clé __interface.
Lorsqu'une classe (ou struct) est marquée avec __sealed, la classe ne peut pas être utilisée comme classe de base. Par exemple :
__sealed __gc class A {
// ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };
Notes
Vous ne pouvez pas utiliser le mot clé __sealed avec le mot clé __abstract.
Exemple
Dans l'exemple suivant, une méthode virtuelle sealed (f) est déclarée. La fonction est ensuite remplacée dans main(), provoquant une erreur de compilation :
// keyword__sealed.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
extern "C" int printf_s(const char*, ...);
__gc struct I
{
__sealed virtual void f()
{
printf_s("I::f()\n");
}
virtual void g()
{
printf_s("I::g()\n");
}
};
__gc struct A : I
{
void f() // C3248 sealed function
{
printf_s("A::f()\n");
}
void g()
{
printf_s("A::g()\n");
}
};
int main()
{
A* pA = new A;
pA->f();
pA->g();
}