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.
Wymagania
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.)
Wymagania
Opcja kompilatora: /clr
Przykł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 {}
};