クラスと構造体 (C++ コンポーネント拡張)
オブジェクトの有効期間が自動的に管理されるクラスまたは構造体を宣言します。 Visual C++ では、オブジェクトがアクセス不能になるかスコープ外になると、そのオブジェクトに割り当てられているメモリを自動的に破棄します。
すべてのランタイム
構文
class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};
パラメーター
class_access (省略可能)
アセンブリの外部にあるクラスまたは構造体のアクセシビリティ。 使用可能な値は public と private です (既定値は private)。 入れ子にされたクラスと構造体は、class_access の指定子を含めることはできません。name
クラスまたは構造体の名前。inherit_access (省略可能)
base_type のアクセシビリティ。 許可されているアクセシビリティは public のみです (既定値は public)。base_type (省略可能)
基本データ型。 ただし、値型を基本データ型として使用することはできません。詳細については、Windows ランタイムと共通言語ランタイムに関するセクションで、このパラメーターの言語別の説明を参照してください。
解説
ref class または value class で宣言されたオブジェクトの既定のメンバー アクセシビリティは private です。 また、ref struct または value struct で宣言されたオブジェクトの既定のメンバー アクセシビリティは public です。
参照型が別の参照型から継承される場合、基本クラスの仮想関数は明示的にオーバーライドするか (override (C++ コンポーネント拡張) を使用)、非表示にする (new (vtable の新しいスロット) (C++ コンポーネント拡張) を使用) 必要があります。 派生クラスの関数は、明示的に virtual と指定する必要があります。
コンパイル時に型が ref class と ref struct のどちらであるか、また value class と value struct のどちらであるかを検出するには、__is_ref_class (type)、__is_value_class (type)、 __is_simple_value_class (type) のいずれかを使用します。 詳細については、「型の特徴のコンパイラ サポート (C++ コンポーネント拡張)」を参照してください。
クラスと構造体の詳細については、次のページを参照してください。
public and private on Native Classes (ネイティブ クラスにおけるパブリックとプライベート)
Define Static Constructors in a Class or Struct (クラスまたは構造体の静的コンストラクターの定義)
Windows ランタイム
解説
Ref クラスおよび構造体 参照してください 値クラスおよび構造体。
パラメーター
base_type (省略可能)
基本データ型。 ref class または ref struct は、0 個以上のインターフェイスおよび 0 個または 1 個の ref 型から継承できます。 value class または value struct は、0 個以上のインターフェイスからのみ継承できます。ref class キーワードまたは ref struct キーワードを使用してオブジェクトを宣言する場合、オブジェクトに対するハンドル (オブジェクトへの参照カウンター ポインター) を使用してオブジェクトにアクセスします。 宣言された変数がスコープ外になると、コンパイラは自動的に基になるオブジェクトを削除します。 オブジェクトが呼び出しでパラメーターを使用するか、変数に格納されている場合、オブジェクトのハンドルは実際に渡されるか、または保存されます。
value class キーワードまたは value struct キーワードを使用してオブジェクトを宣言すると、宣言されたオブジェクトのオブジェクト有効期間は監視されません。 このオブジェクトは、C++ の他の標準のクラスまたは構造体と同様です。
要件
コンパイラ オプション: /ZW
共通言語ランタイム
解説
次の表に、「すべてのランタイム」セクションに示されている構文の、C++/CLI に固有の違いを示します。
パラメーター
base_type (省略可能)
基本データ型。 ref class または ref struct は、0 個以上のマネージ インターフェイスおよび 0 個または 1 個の ref 型から継承できます。 value class またはvalue struct は、0 個以上のマネージ インターフェイスからのみ継承できます。ref class キーワードと ref struct キーワードを指定すると、コンパイラはクラスまたは構造体をヒープに割り当てます。 オブジェクトが呼び出しでパラメーターを使用するか、変数に格納されている場合、オブジェクトへの参照が実際に渡されるか、または保存されます。
value class と value struct キーワードは、割り当てられたクラスまたは構造体の値を関数に渡すか、メンバーに格納されることをコンパイラに指示します。
要件
コンパイラ オプション: /clr