Share via


__sealed

Nota

Este tema solo es aplicable a la versión 1 de Extensiones administradas para C++.Esta sintaxis solo se debe utilizar para mantener el código de la versión 1.Vea sellado para obtener información sobre el uso de la funcionalidad equivalente en la nueva sintaxis.

Evita que un método se invalide o una clase sea una clase base.

__sealed class-specifier 
__sealed struct-specifier 
__sealed function-declarator

Comentarios

La palabra clave __sealed especifica que un método de clase no puede invalidarse o que una clase no puede ser una clase base.

Cuando use la palabra clave __sealed, tenga en cuenta los puntos siguientes:

  • Un método virtual __sealed no puede invalidarse.

  • Si un método de miembro no virtual se marca con __sealed, la calificación de __sealed se omite.

  • Un método __sealed no puede ser puro.

  • La palabra clave __sealed no se permite cuando se utiliza con la palabra clave __interface.

Cuando una clase (o struct) se marca con __sealed, no se puede usar como clase base. Por ejemplo:

__sealed __gc class A {
   // ...
};
// error: cannot derive from a sealed class
__gc class B : public A { /* ...*/ };

Nota

La palabra clave __sealed no se permite cuando se usa con la palabra clave __abstract.

Ejemplo

En el ejemplo siguiente, se declara un método virtual sellado (f). La función se invalida en main(), produciendo un error del compilador:

// keyword__sealed.cpp
// compile with: /clr:oldSyntax

#using <mscorlib.dll>
extern "C" int printf_s(const char*, ...);

__gc struct I
{
    __sealed virtual void f()
    { 
        printf_s("I::f()\n"); 
    }
    virtual void g()
    {
        printf_s("I::g()\n");
    }
};

__gc struct A : I 
{
    void f() // C3248 sealed function
    { 
        printf_s("A::f()\n"); 
    }   
    void g()
    {
        printf_s("A::g()\n");
    }
};

int main()
{
    A* pA = new A;

    pA->f();
    pA->g();
}