__sealed
Nota
Questo argomento si applica solo alla versione 1 delle estensioni gestite per C++.Questa sintassi deve essere utilizzata solo per gestire il codice della versione 1.Per informazioni sull'utilizzo della funzionalità equivalente nella nuova sintassi, vedere sealed (Estensioni del componente C++).
Viene impedito a un metodo di essere sottoposto a override o a una classe di essere una classe base.
__sealed class-specifier
__sealed struct-specifier
__sealed function-declarator
Note
La parola chiave __sealed specifica che un metodo di classe non può essere sottoposto a override o che una classe non può essere una classe base.
Quando si utilizza la parola chiave __sealed, tenere presente quanto segue:
Un metodo virtuale __sealed non può essere sottoposto a override.
Se un metodo di membro non virtuale è contrassegnato come __sealed, la qualificazione __sealed viene ignorata.
Un metodo __sealed non può essere puro.
La parola chiave __sealed non è consentita se utilizzata con la parola chiave __interface.
Quando una classe (o struct) è contrassegnata con __sealed, non può essere utilizzata come classe base. Ad esempio:
__sealed __gc class A {
// ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };
Nota
La parola chiave __sealed non è consentita se utilizzata con la parola chiave __abstract.
Esempio
Nell'esempio seguente, viene dichiarato un metodo virtuale sealed (f). La funzione viene quindi sottoposta a override in main(), determinando un errore di compilazione:
// 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();
}