sealed (Extensiones de componentes de C++)
sealed es una palabra clave contextual para las clases de referencia que indica que un miembro virtual no se puede invalidar o que un tipo no se puede usar como tipo base.
[!NOTA]
El lenguaje estándar ISO C++11 tiene la palabra clave final, que es compatible con Visual Studio.Use final en las clases estándar y sealed en las clases de referencia.
Todos los runtimes
Sintaxis
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Parámetros
Identificador
Nombre de la función o clase.return-type
Tipo devuelto por una función.
Comentarios
En el primer ejemplo de sintaxis, una clase está protegida.En el segundo ejemplo, una función virtual está protegida.
La palabra clave sealed es válida para los destinos nativos y también para Windows en tiempo de ejecución y Common Language Runtime (CLR).Para obtener más información, vea Especificadores de invalidación y compilaciones nativas.
Puede detectar en tiempo de compilación si un tipo está sellado mediante el rasgo de tipo __is_sealed (type).Para obtener más información, vea Compatibilidad de compilador para type traits (Extensiones de componentes de C++).
sealed es una palabra clave contextual.Para obtener más información, vea Palabras clave contextuales (Extensiones de componentes de C++).
Windows en tiempo de ejecución
Vea Clases y structs ref.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
(No hay notas para esta característica de lenguaje que solo se aplican a Common Language Runtime).
Requisitos
Opción del compilador: /clr
Ejemplos
En el ejemplo de código siguiente se muestra el efecto de sealed en un miembro 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();
}
Output
En el ejemplo de código siguiente se muestra cómo marcar una clase 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 {}
};
Vea también
Conceptos
Extensiones de componentes para plataformas de tiempo de ejecución