sealed (C++/CLI e C++/CX)
sealed é uma palavra-chave contextual para classes de referência que indica que um membro virtual não pode ser substituído, ou que um tipo não pode ser usado como um tipo base.
Observação
A linguagem padrão ISO 11 do C++introduziu a palavra-chave final. Use final em classes padrão e sealed em classes ref.
Todos os Runtimes
Sintaxe
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Parâmetros
identificador
O nome da função ou classe.
return-type
O tipo retornado por uma função.
Comentários
No primeiro exemplo de sintaxe, uma classe é “sealed”. No segundo exemplo, uma função virtual é “sealed”.
Use a palavra-chave sealed para as classes ref e suas funções de membro virtual. Saiba mais em Especificadores de substituição e compilações nativas.
Você pode detectar se um tipo é “sealed” usando o traço de tipo __is_sealed(type)
no tempo de compilação. Saiba mais em Suporte para compilador de traços de tipo.
sealed é uma palavra-chave contextual. Saiba mais em Palavras-chave contextuais.
Windows Runtime
Confira Classes e structs ref.
Requisitos
Opção do compilador: /ZW
Common Language Runtime
(Não há comentários para esse recurso de linguagem que se apliquem apenas ao Common Language Runtime.)
Requisitos
Opção do compilador: /clr
Exemplos
O exemplo de código a seguir mostra o efeito de sealed em um membro virtual.
// 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();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::f
O próximo exemplo de código mostra como marcar uma classe como “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 {}
};