__sealed
Dica
Este tópico se aplica somente à versão 1 de Managed Extensions for C++.Esta sintaxe só deve ser usada para manter o código da versão 1.Consulte lacrados para obter informações sobre como usar a funcionalidade equivalente na nova sintaxe.
Impede que um método seja substituído ou que uma classe seja uma classe base.
__sealed class-specifier
__sealed struct-specifier
__sealed function-declarator
Comentários
A palavra-chave __sealed especifica que um método da classe não pode ser substituído ou que uma classe não pode ser uma classe base.
Ao usar a palavra-chave __sealed, lembre-se dos seguintes pontos:
Um método virtual __sealed não pode ser substituído.
Se um método de membro não virtual for marcado como __sealed, a qualificação de __sealed será ignorada.
Um método __sealed não pode ser puro.
A palavra-chave __sealed não é permitida quando usada com a palavra-chave __interface.
Quando uma classe (ou struct) é marcada com __sealed, a classe não pode ser usada como uma classe base. Por exemplo:
__sealed __gc class A {
// ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };
Dica
A palavra-chave __sealed não é permitida quando usada com a palavra-chave __abstract.
Exemplo
No exemplo a seguir, um método virtual lacrado (f) é declarado. A função é, então, substituída em main(), causando um erro do compilador:
// 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();
}