クラスと構造体 (C++ コンポーネント拡張)
オブジェクトの有効期間が自動的に管理されるクラスまたは構造体を宣言します。Visual C++ では、オブジェクトがアクセス不能になるかスコープ外になると、そのオブジェクトに割り当てられているメモリを自動的に破棄します。
All Runtimes
Syntax
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 {};
Parameters
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 クラスと構造体」および「値クラスと構造体」を参照してください。
Parameters
base_type (optional)
A base type.ref class または ref struct は、0 個以上のインターフェイスおよび 0 個または 1 個の ref 型から継承できます。value class または value struct は、0 個以上のインターフェイスからのみ継承できます。ref class キーワードまたは ref struct キーワードを使用してオブジェクトを宣言する場合、オブジェクトに対するハンドル (オブジェクトへの参照カウンター ポインター) を使用してオブジェクトにアクセスします。宣言された変数がスコープ外になると、コンパイラは自動的に基になるオブジェクトを削除します。そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合、実際にそのオブジェクトのハンドルが渡されるか格納されます。
value class キーワードまたは value struct キーワードを使用してオブジェクトを宣言すると、宣言されたオブジェクトのオブジェクト有効期間は監視されません。このオブジェクトは、C++ の他の標準のクラスまたは構造体と同様です。
要件
Compiler option: /ZW
共通言語ランタイム
解説
次の表に、「すべてのランタイム」セクションに示されている構文の、C++/CLI に固有の違いを示します。
Parameters
base_type (optional)
A base type.ref class または ref struct は、0 個以上のマネージ インターフェイスおよび 0 個または 1 個の ref 型から継承できます。value class またはvalue struct は、0 個以上のマネージ インターフェイスからのみ継承できます。ref class キーワードと ref struct キーワードを指定すると、コンパイラはクラスまたは構造体をヒープに割り当てます。そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合、実際にそのオブジェクトへの参照が渡されるか格納されます。
value class キーワードと value struct キーワードを指定すると、割り当てられたクラスまたは構造体の値が関数に渡されるか、メンバーに格納されます。
要件
Compiler option: /clr