sealed (C++/CLI および C++/CX)
sealed は ref クラスの状況依存キーワードであり、仮想メンバーがオーバーライドできないこと、または型を基底型として使用できないことを示します。
Note
ISO C++11 標準言語に final キーワードが導入されました。 標準クラスでは final を、ref クラスでは sealed を使用してください。
すべてのランタイム
構文
ref class identifier sealed {...};
virtual return-type identifier() sealed {...};
パラメーター
identifier
関数またはクラスの名前。
return-type
関数によって返される型。
解説
最初の構文例ではクラスがシールされます。 2 番目の例では仮想関数がシールされます。
sealed キーワードは、ref クラスとそれらの仮想メンバー関数で使用します。 詳細については、指定子とネイティブ コンパイルのオーバーライドに関する記事を参照してください。
__is_sealed(type)
型の特徴を使用することで、型がシールされているかどうかをコンパイル時に判断することができます。 詳細については、「型の特徴のコンパイラ サポート」を参照してください。
sealed は状況依存キーワードです。 詳細については、「状況依存キーワード」を参照してください。
Windows ランタイム
「Ref クラスと構造体」を参照してください。
要件
コンパイラ オプション: /ZW
共通言語ランタイム
(この言語機能には共通言語ランタイムのみに適用される特記事項がありません。)
要件
コンパイラ オプション: /clr
例
次のコード例では、仮想メンバーに対する sealed の効果を示します。
// 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
次のコード例では、シール済みというマークをクラスに付ける方法を示します。
// 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 {}
};