sealed (C++/CLI y C++/CX)
sealed es una palabra clave contextual para las clases de referencia que indica que no se puede reemplazar un miembro virtual o que no se puede usar un tipo como tipo base.
Nota:
El lenguaje de la norma ISO C++11 presentó la palabra clave final. 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
identifier
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á sellada. En el segundo ejemplo, una función virtual está sellada.
Use la palabra clave sealed para las clases de referencia y sus funciones miembro virtuales. Para obtener más información, consulte el artículo sobre los especificadores de invalidación y las compilaciones nativas.
Puede detectar en tiempo de compilación si un tipo está sellado usando el rasgo de tipo __is_sealed(type)
. Para más información, consulte Compatibilidad del compilador con rasgos de tipo.
sealed es una palabra clave contextual. Para obtener más información, consulte Context-Sensitive Keywords (Palabras clave contextuales).
Windows en tiempo de ejecución
Consulte el artículo sobre las clases de referencia y structs.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
(No hay notas para esta característica de lenguaje que solo se apliquen a Common Language Runtime).
Requisitos
Opción del compilador: /clr
Ejemplos
En este ejemplo de código que se muestra a continuación, puede ver 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();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::f
En el ejemplo de código siguiente se muestra cómo marcar una clase como sellada.
// 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 {}
};