sealed (C++/CLI und C++/CX)
sealed ist ein kontextbezogenes Schlüsselwort für Verweisklassen, das anzeigt, dass ein virtuelles Element nicht außer Kraft gesetzt werden kann oder ein bestimmter Typ nicht als Basistyp verwendet werden kann.
Hinweis
Mit der ISO C++ 11-Standardsprache wurde das final-Schlüsselwort eingeführt. Verwenden Sie final für Standardklassen und sealed für Verweisklassen.
Alle Laufzeiten
Syntax
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Parameter
identifier
Der Name der Funktion oder Klasse.
return-type
Der Typ, der von einer Funktion zurückgegeben wird.
Hinweise
Im ersten Syntaxbeispiel wird eine Klasse versiegelt. Im zweiten Beispiel wird eine virtuelle Funktion versiegelt.
Verwenden Sie das sealed-Schlüsselwort für Verweisklassen und ihre virtuellen Memberfunktionen. Weitere Informationen finden Sie unter Überschreibungsspezifizierer und native Kompilierungen.
Sie können zur Kompilierzeit erkennen, ob ein Typ „sealed“ ist, indem Sie das Typmerkmal __is_sealed(type)
verwenden. Weitere Informationen finden Sie unter Compilerunterstützung für Typmerkmale.
sealed ist ein kontextbezogenes Schlüsselwort. Weitere Informationen finden Sie unter Kontextbezogene Schlüsselwörter.
Windows-Runtime
Siehe Verweisklassen und Strukturen.
Anforderungen
Compileroption: /ZW
Übersicht: Common Language Runtime (CLR)
(Es gibt keine Hinweise für diese Sprachfunktion, die nur für Common Language Runtime gelten.)
Anforderungen
Compileroption: /clr
Beispiele
Das folgende Codebeispiel zeigt die Wirkung von sealed auf einen virtuellen Member.
// 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();
}
X::f override of I1::f
X::f override of I1::g
Y::f override of I1::f
Das nächste Codebeispiel zeigt , wie eine Klasse als versiegelt markiert wird.
// 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 {}
};