sealed (C++ コンポーネント拡張)

sealed は、ref クラスの状況依存のキーワードで、仮想メンバーをオーバーライドできないこと、または型を基本型として使用できないことを示します。

[!メモ]

ISO C++11 標準言語には final キーワードがあり、これは Visual Studio でサポートされています。標準クラスでは final を使用し、ref クラスでは sealed を使用します。

All Runtimes

Syntax

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

Parameters

  • identifier
    関数またはクラスの名前。

  • return-type
    関数によって返される型。

解説

最初の構文の例では、クラスがシールされています。2 番目の例では、仮想関数がシールされています。

sealed キーワードは、ネイティブ ターゲット、Windows ランタイム、および共通言語ランタイム (CLR) に有効です。詳細については、「Override Specifiers and Native Compilations (オーバーライド指定子とネイティブ コンパイル)」を参照してください。

コンパイル時に、__is_sealed (type) の型の特徴を使用して、型がシールされているかどうかを検出できます。詳細については、「型の特徴のコンパイラ サポート (C++ コンポーネント拡張)」を参照してください。

sealed は状況依存のキーワードです。詳細については、「状況依存のキーワード (C++ コンポーネント拡張)」を参照してください。

Windows ランタイム

Ref classes and structs (ref クラスおよび構造体)」を参照してください。

0w2w91tf.collapse_all(ja-jp,VS.110).gif要件

Compiler option: /ZW

共通言語ランタイム

(There are no remarks for this language feature that apply to only the common language runtime.)

0w2w91tf.collapse_all(ja-jp,VS.110).gif要件

Compiler option: /clr

0w2w91tf.collapse_all(ja-jp,VS.110).gif

次のコード例は、仮想メンバーに対する 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();
}

出力

  
  
  

次のコード例は、シール済みのマークをクラスに付ける方法を示しています。

// 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 {}
};

参照

概念

ランタイム プラットフォームのコンポーネントの拡張機能