Udostępnij za pośrednictwem


sealed (C++ Component Extensions)

sealed jest kontekstowym słowem kluczowym dla klas ref, które wskazuje, że wirtualny członek nie może być przesłonięty lub że dany typ nie może być użyty jako typ podstawowy.

[!UWAGA]

Standardowy język ISO C++11 ma słowo kluczowe final, które jest obsługiwane w programie Visual Studio.Używaj final w przypadku klas standardowych i sealed w przypadku klas referencyjnych.

Wszystkie czasy wykonania

Składnia

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

Parametry

  • Identyfikator
    Nazwa funkcji i klasy.

  • typ zwracany
    Typ, który jest zwracany przez funkcję.

Uwagi

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

Słowo kluczowe sealed jest prawidłowe dla macierzystych elementów docelowych, a także dla Środowisko wykonawcze systemu Windows i środowiska uruchomieniowego języka wspólnego (CLR).Aby uzyskać więcej informacji, zobacz Nadpisywanie specyfikatorów i macierzystych kompilacji.

W czasie kompilacji możesz wykryć, czy typ jest zamknięty za pomocą cechy typu __is_sealed (type).Aby uzyskać więcej informacji, zobacz Obsługa cech typu w kompilatorze (C++ Component Extensions).

sealed jest słowem kluczowym uzależnionym od kontekstu.Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe (C++ Component Extensions).

Środowisko wykonawcze systemu Windows

Zob. Klasy i struktury referencyjne.

0w2w91tf.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /ZW

Środowisko uruchomieniowe języka wspólnego

(Nie ma żadnych uwag dla tej funkcji języka, które mają zastosowanie do wszystkich programów środowiska uruchomienia wspólnego języka.)

0w2w91tf.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /clr

0w2w91tf.collapse_all(pl-pl,VS.110).gifPrzykłady

Poniższy przykład kodu ilustruje wpływ, jaki wywiera sealed 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();
}

Dane wyjściowe

  
  
  

Następny przykład kodu pokazuje, w jaki sposób oznaczyć klasę jako zamkniętą.

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

Koncepcje

Składnik rozszerzeń dla platform Runtime