Freigeben über


__sealed

 

Veröffentlicht: Juli 2016

Hinweis

Dieses Thema gilt nur für Version 1 von Managed Extensions für C++. Diese Syntax sollte nur verwendet werden, um Code von Version 1 beizubehalten. Finden Sie unter sealed (C++ Component Extensions) Informationen zur Verwendung der entsprechenden Funktionalität in der neuen Syntax.

Verhindert, dass eine Methode überschrieben wird oder eine Klasse zur Basisklasse wird.

Syntax

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

Hinweise

Das __sealed-Schlüsselwort gibt an, dass eine Klassenmethode nicht überschrieben werden kann oder dass eine Klasse keine Basisklasse sein kann.

Wenn Sie das __sealed-Schlüsselwort verwenden, beachten Sie die folgenden Punkte:

  • Eine virtuelle __sealed-Methode kann nicht überschrieben werden.

  • Wenn eine nicht virtuelle Membermethode als __sealed gekennzeichnet ist, wird die __sealed-Qualifizierung ignoriert.

  • Eine __sealed-Methode kann nicht rein sein.

  • Die __sealed Schlüsselwort darf nicht mit der __interface Schlüsselwort.

Wenn eine Klasse (oder Struktur) mit __sealed markiert wurde, kann die Klasse nicht als Basisklasse verwendet werden. Zum Beispiel:

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

Hinweis

Das __sealed-Schlüsselwort ist nicht zulässig, wenn es mit dem __abstract-Schlüsselwort verwendet wird.

Beispiel

Im folgenden Beispiel wird eine versiegelte virtuelle Methode (f) deklariert. Die Funktion wird dann in main() überschrieben, was einen Compilerfehler verursacht:

// 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();
}