Freigeben über


__sealed

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.Informationen über die Verwendung der entsprechenden Funktionen in der neuen Syntax finden Sie unter sealed (Komponentenerweiterungen für C++).

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

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

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

Wenn eine Klasse (oder Struktur) mit __sealed markiert wurde, kann die Klasse nicht als Basisklasse verwendet werden. 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();
}