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