Freigeben über


sealed (Komponentenerweiterungen für C++)

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

Die Standardsprache gemäß ISO C++11 weist das Schlüsselwort final auf, das in Visual Studio unterstützt wird.Verwenden Sie final für Standardklassen und sealed für Verweisklassen.

Alle Laufzeiten

Syntax

ref class identifier sealed {...};
virtual return-type identifier() sealed {...};

Parameter

  • Bezeichner
    Der Name der Funktion oder Klasse.

  • Rückgabetyp
    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.

Das Schlüsselwort sealed ist für systemeigene Ziele und ebenso für die Windows-Runtime und die CLR (Common Language Runtime) gültig. Weitere Informationen finden Sie unter Überschreibungsspezifizierer und systemeigene 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 (Komponentenerweiterungen für C++).

sealed ist ein kontextbezogenes Schlüsselwort. Weitere Informationen finden Sie unter Kontextbezogene Schlüsselwörter (Komponentenerweiterungen für C++).

Windows-Runtime

Siehe dazu Verweisklassen und Strukturen.

Anforderungen

Compileroption: /ZW

Common Language Runtime

(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 ein virtuelles Element.

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

Ausgabe

              
                 
              
              
              
                 
              
              
              
                
              
            

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 {}
};

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen