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.

0w2w91tf.collapse_all(es-es,VS.110).gifRequisitos

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).

0w2w91tf.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador: /clr

0w2w91tf.collapse_all(es-es,VS.110).gifEjemplos

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