sealed (C++/CLI e C++/CX)
sealed è una parola chiave sensibile al contesto per le classi di riferimento che indica che non è possibile eseguire l'override di un membro virtuale o che non è possibile usare un tipo come tipo di base.
Nota
Il linguaggio standard ISO C++11 ha introdotto la parola chiave final. Usare final nelle classi standard e sealed nelle classi di riferimento.
Tutti i runtime
Sintassi
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
Parametri
identificatore
Nome della funzione o della classe.
return-type
Tipo restituito da una funzione.
Osservazioni:
Nel primo esempio di sintassi, la classe è sealed. Nel secondo esempio una funzione virtuale è sealed.
Usare la parola chiave sealed per le classi di riferimento e le relative funzioni di membri virtuali. Per altre informazioni, vedere Identificatori di override e compilazioni native.
È possibile rilevare in fase di compilazione se un tipo è sealed usando la caratteristica del tipo __is_sealed(type)
. Per altre informazioni, vedere Supporto del compilatore per caratteristiche di tipo.
sealed è una parola chiave sensibile al contesto. Per altre informazioni, vedere Parole chiave sensibili al contesto.
Windows Runtime
Vedere Classi e struct di riferimento.
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Non esistono note per questa funzionalità del linguaggio che si applichino solo a Common Language Runtime.
Requisiti
Opzione del compilatore: /clr
Esempi
L'esempio di codice seguente mostra l'effetto di sealed su un membro virtuale.
// 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
L'esempio di codice successivo mostra come contrassegnare una classe come sealed.
// 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 {}
};