Compartir a través de


sealed (Extensiones de componentes de C++)

sealed es una palabra clave contextual para las clases ref que indica que no se puede reemplazar un miembro virtual o que no se puede usar un tipo como tipo base.

NotaNota

El lenguaje estándar ISO C ++ 11 tiene la palabra clave final, que es compatible con Visual Studio.Use final en clases estándar y sealed en las clases ref.

Todos los runtimes

Sintaxis

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

Parámetros

  • identificador
    Nombre de la función o clase.

  • tipo de valor devuelto
    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.

La palabra clave sealed es válida para destinos nativos, así como para Windows en tiempo de ejecución y Common Language Runtime (CLR). Para obtener más información, consulte Declarar especificadores de invalidación en las compilaciones nativas.

Puede detectar en tiempo de compilación si un tipo está sellado usando el rasgo de tipo __is_sealed (type). Para obtener más información, consulte Compatibilidad de compilador para type traits (Extensiones de componentes de C++).

sealed es una palabra clave contextual. Para obtener más información, consulte Palabras clave contextuales (Extensiones de componentes de C++).

Windows en tiempo de ejecución

Consulte Ref (Clases 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

Este ejemplo de código siguiente 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();
}

Resultado

              
                 
              
              
              
                 
              
              
              
                
              
            

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 {}
};

Vea también

Conceptos

Extensiones de componentes para plataformas de tiempo de ejecución