ref class と ref struct (C++/CLI および C++/CX)

ref class または ref struct 拡張機能は、そのオブジェクトの有効期間が自動的に管理されるクラスまたは構造体を宣言します。 オブジェクトがアクセスできなくなるかスコープ外になると、そのメモリが解放されます。

すべてのランタイム

構文

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
(省略可能) アセンブリの外部にあるクラスまたは構造体のアクセシビリティ。 使用可能な値は publicprivate です (既定値は private)。 入れ子になったクラスまたは構造体には class_access 指定子を指定できません。

name
クラスまたは構造体の名前。

modifier
(省略可能) 有効な修飾子は、abstractsealed です。

inherit_access
(省略可能) base_interface のアクセシビリティ。 許可されているアクセシビリティは public のみです (既定値は public)。

base_type
(省略可能) 基本型。 ただし、値型を基本型として使用することはできません。

詳細については、Windows ランタイムと共通言語ランタイムに関するセクションで、このパラメーターの言語別の説明を参照してください。

解説

ref class または value class で宣言されたオブジェクトの既定のメンバー アクセシビリティは private です。 また、ref struct または value struct で宣言されたオブジェクトの既定のメンバー アクセシビリティは public です。

参照型が別の参照型から継承される場合、基底クラスの仮想関数は (override を使用して) 明示的にオーバーライドするか、(new (vtable の新しいスロット) を使用して) 非表示にする 必要があります。 また、派生クラスの関数は、明示的に virtual としてマークする必要があります。

コンパイル時に、型が ref classref structvalue class、または value struct であるかを検出するには、__is_ref_class (type)__is_value_class (type)、または __is_simple_value_class (type) を使用します。 詳細については、「型の特徴のコンパイラ サポート」を参照してください。

クラスと構造体の詳細については、以下のページを参照してください。

Windows ランタイム

解説

Ref クラスと構造体と「値クラスと構造体」を参照してください。

パラメーター

base_type
(省略可能) 基本型。 ref class または ref struct は、0 個以上のインターフェイスと 0 個または 1 個の ref 型から継承できます。 value class または value struct は、ゼロ個以上のインターフェイスからのみ継承できます。

ref class または ref struct キーワードを使用してオブジェクトを宣言する場合、オブジェクトに対するハンドル (オブジェクトへの参照カウンター ポインター) を使用してオブジェクトにアクセスします。 宣言された変数がスコープ外になると、コンパイラは自動的に基になるオブジェクトを削除します。 そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合は、そのオブジェクトのハンドルが、実際に渡されるか格納されます。

value class または value struct キーワードを使用してオブジェクトを宣言すると、宣言されたオブジェクトのオブジェクト有効期間は監視されません。 このオブジェクトは、C++ の他の標準のクラスや構造体と同様です。

必要条件

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

共通言語ランタイム

解説

次の表に、「すべてのランタイム」セクションに示されている構文の C++/CLI に固有の違いを示します。

パラメーター

base_type
(省略可能) 基本型。 ref class または ref struct は、0 個以上のマネージド インターフェイスと 0 個または 1 個の ref 型から継承できます。 ref class または ref struct は、ゼロ個以上のマネージド インターフェイスからのみ継承できます。

ref class キーワードと ref struct キーワードを指定すると、コンパイラはクラスまたは構造体をヒープに割り当てます。 そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合は、そのオブジェクトへの参照が、実際に渡されるか格納されます。

value class キーワードと value struct キーワードを指定すると、コンパイラは、割り当てられたクラスまたは構造体の値を関数に渡すか、メンバーに格納します。

必要条件

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

関連項目

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