Udostępnij za pośrednictwem


sealed (C++/CLI i C++/CX)

sealed to kontekstowe słowo kluczowe dla klas ref, które wskazuje, że wirtualny element członkowski nie może być zastępowany lub że typ nie może być używany jako typ podstawowy.

Uwaga

Język standardowy ISO C++11 wprowadził ostateczne słowo kluczowe. Użyj końcowego w klasach standardowych i zapieczętowanego na klasach ref.

Wszystkie środowiska wykonawcze

Składnia

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

Parametry

identifier
Nazwa funkcji lub klasy.

zwracany typ
Typ zwracany przez funkcję.

Uwagi

W pierwszym przykładzie składni klasa jest zapieczętowana. W drugim przykładzie funkcja wirtualna jest zapieczętowana.

Użyj zapieczętowanego słowa kluczowego dla klas ref i ich wirtualnych funkcji składowych. Aby uzyskać więcej informacji, zobacz Zastępowanie specyfikatorów i kompilacji natywnych.

W czasie kompilacji można wykryć, czy typ jest zapieczętowany przy użyciu __is_sealed(type) cech typu. Aby uzyskać więcej informacji, zobacz Obsługa kompilatora dla cech typów.

zapieczętowane jest kontekstowym słowem kluczowym. Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe.

Środowisko wykonawcze systemu Windows

Zobacz Klasy i struktury Ref.

Wymagania

Opcja kompilatora: /ZW

środowiska uruchomieniowe w trakcie wykonania

(Nie ma żadnych uwag dotyczących tej funkcji języka, które mają zastosowanie tylko do środowiska uruchomieniowego języka wspólnego).

Wymagania

Opcja kompilatora: /clr

Przykłady

W poniższym przykładzie kodu pokazano wpływ zapieczętowania na wirtualny element członkowski.

// 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

W następnym przykładzie kodu pokazano, jak oznaczyć klasę jako zapieczętowaną.

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

Zobacz też

Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows