sealed (C++/CLI および C++/CX)sealed (C++/CLI and C++/CX)

sealed は ref クラスの状況依存キーワードであり、仮想メンバーがオーバーライドできないこと、または型を基底型として使用できないことを示します。sealed is a context-sensitive keyword for ref classes that indicates that a virtual member cannot be overridden, or that a type cannot be used as a base type.

注意

ISO C++11 標準言語に final キーワードが導入されました。The ISO C++11 Standard language introduced the final keyword. 標準クラスでは final を、ref クラスでは sealed を使用してください。Use final on standard classes, and sealed on ref classes.

すべてのランタイムAll Runtimes

構文Syntax

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

パラメーターParameters

identifieridentifier
関数またはクラスの名前。The name of the function or class.

return-typereturn-type
関数によって返される型。The type that's returned by a function.

解説Remarks

最初の構文例ではクラスがシールされます。In the first syntax example, a class is sealed. 2 番目の例では仮想関数がシールされます。In the second example, a virtual function is sealed.

sealed キーワードは、ref クラスとそれらの仮想メンバー関数で使用します。Use the sealed keyword for ref classes and their virtual member functions. 詳細については、指定子とネイティブ コンパイルのオーバーライドに関する記事を参照してください。For more information, see Override Specifiers and Native Compilations.

__is_sealed(type) 型の特徴を使用することで、型がシールされているかどうかをコンパイル時に判断することができます。You can detect at compile time whether a type is sealed by using the __is_sealed(type) type trait. 詳細については、「型の特徴のコンパイラ サポート」を参照してください。For more information, see Compiler Support for Type Traits.

sealed は状況依存キーワードです。sealed is a context-sensitive keyword. 詳細については、「状況依存キーワード」を参照してください。For more information, see Context-Sensitive Keywords.

Windows ランタイムWindows Runtime

Ref クラスと構造体」を参照してください。See Ref classes and structs.

要件Requirements

コンパイラ オプション: /ZWCompiler option: /ZW

共通言語ランタイムCommon Language Runtime

(この言語機能には共通言語ランタイムのみに適用される特記事項がありません。)(There are no remarks for this language feature that apply to only the common language runtime.)

要件Requirements

コンパイラ オプション: /clrCompiler option: /clr

使用例Examples

次のコード例では、仮想メンバーに対する sealed の効果を示します。This following code example shows the effect of sealed on a virtual member.

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

次のコード例では、シール済みというマークをクラスに付ける方法を示します。The next code example shows how to mark a class as 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 {}
};

関連項目See also

.NET および UWP でのコンポーネント拡張Component Extensions for .NET and UWP