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

ref class または ref struct 拡張機能は、そのオブジェクトの有効期間が自動的に管理されるクラスまたは構造体を宣言します。The ref class or ref struct extensions declare a class or struct whose object lifetime is administered automatically. オブジェクトがアクセスできなくなるかスコープ外になると、そのメモリが解放されます。When the object is no longer accessible or goes out of scope, the memory is released.

すべてのランタイムAll Runtimes

構文Syntax

      class_access
      ref class
      name
      modifier :  inherit_accessbase_type {};
class_accessref structnamemodifier :  inherit_accessbase_type {};
class_accessvalue classnamemodifier :  inherit_accessbase_type {};
class_accessvalue structnamemodifier :  inherit_accessbase_type {};

パラメーターParameters

class_accessclass_access
(省略可能) アセンブリの外部にあるクラスまたは構造体のアクセシビリティ。(Optional) The accessibility of the class or struct outside the assembly. 使用可能な値は publicprivate です (既定値は private です)。Possible values are public and private (private is the default). 入れ子になったクラスまたは構造体には class_access 指定子を指定できません。Nested classes or structs cannot have a class_access specifier.

namename
クラスまたは構造体の名前。The name of the class or struct.

modifiermodifier
(省略可能) 有効な修飾子は、abstractsealed です。(Optional) abstract and sealed are valid modifiers.

inherit_accessinherit_access
(省略可能) base_interface のアクセシビリティ。(Optional) The accessibility of base_type. 許可されるアクセシビリティは public のみです (既定値は public です)。The only permitted accessibility is public (public is the default).

base_typebase_type
(省略可能) 基本型。(Optional) A base type. ただし、値型を基本型として使用することはできません。However, a value type cannot act as a base type.

詳細については、Windows ランタイムと共通言語ランタイムに関するセクションで、このパラメーターの言語別の説明を参照してください。For more information, see the language-specific descriptions of this parameter in the Windows Runtime and Common Language Runtime sections.

解説Remarks

ref class または value class で宣言されたオブジェクトの既定のメンバーのアクセシビリティは private です。The default member accessibility of an object declared with ref class or value class is private. また、ref struct または value struct で宣言されたオブジェクトの既定のメンバーのアクセシビリティは public です。And the default member accessibility of an object declared with ref struct or value struct is public.

参照型が別の参照型から継承される場合、基底クラスの仮想関数は (override を使用して) 明示的にオーバーライドするか、(new (vtable の新しいスロット) を使用して) 非表示にする 必要があります。When a reference type inherits from another reference type, virtual functions in the base class must explicitly be overridden (with override) or hidden (with new (new slot in vtable)). 派生クラスの関数も、明示的に virtual とマークする必要があります。The derived class functions must also be explicitly marked as virtual.

コンパイル時に、型が ref classref structvalue class、または value struct であるかを検出するには、__is_ref_class (type)__is_value_class (type)、または __is_simple_value_class (type) を使用します。To detect at compile time whether a type is a ref class or ref struct, or a value class or value struct, use __is_ref_class (type), __is_value_class (type), or __is_simple_value_class (type). 詳細については、「型の特徴のコンパイラ サポート」を参照してください。For more information, see Compiler Support for Type Traits.

クラスと構造体の詳細については、以下のページを参照してください。For more information on classes and structs, see

Windows ランタイムWindows Runtime

解説Remarks

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

パラメーターParameters

base_typebase_type
(省略可能) 基本型。(Optional) A base type. ref class または ref struct は、0 個以上のインターフェイスと 0 個または 1 個の ref 型から継承できます。A ref class or ref struct can inherit from zero or more interfaces and zero or one ref types. value class または value struct は、ゼロ個以上のインターフェイスからのみ継承できます。A value class or value struct can only inherit from zero or more interfaces.

ref class または ref struct キーワードを使用してオブジェクトを宣言する場合、オブジェクトに対するハンドル (オブジェクトへの参照カウンター ポインター) を使用してオブジェクトにアクセスします。When you declare an object by using the ref class or ref struct keywords, the object is accessed by a handle to an object; that is, a reference-counter pointer to the object. 宣言された変数がスコープ外になると、コンパイラは自動的に基になるオブジェクトを削除します。When the declared variable goes out of scope, the compiler automatically deletes the underlying object. そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合は、実際にそのオブジェクトのハンドルが渡されるか格納されます。When the object is used as a parameter in a call or is stored in a variable, a handle to the object is actually passed or stored.

value class または value struct キーワードを使用してオブジェクトを宣言すると、宣言されたオブジェクトのオブジェクト有効期間は監視されません。When you declare an object by using the value class or value struct keywords, the object lifetime of the declared object is not supervised. このオブジェクトは、C++ の他の標準のクラスや構造体と同様です。The object is like any other standard C++ class or struct.

要件Requirements

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

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

解説Remarks

次の表に、「すべてのランタイム」セクションに示されている構文の C++/CLI に固有の違いを示します。The following table lists differences from the syntax shown in the All Runtimes section that are specific to C++/CLI.

パラメーターParameters

base_typebase_type
(省略可能) 基本型。(Optional) A base type. ref class または ref struct は、0 個以上のマネージド インターフェイスと 0 個または 1 個の ref 型から継承できます。A ref class or ref struct can inherit from zero or more managed interfaces and zero or one ref types. ref class または ref struct は、ゼロ個以上のマネージド インターフェイスからのみ継承できます。A value class or value struct can only inherit from zero or more managed interfaces.

ref class キーワードと ref struct キーワードを指定すると、コンパイラはクラスまたは構造体をヒープに割り当てます。The ref class and ref struct keywords tell the compiler that the class or structure is to be allocated on the heap. そのオブジェクトが呼び出しのパラメーターとして使用されているか、変数に格納されている場合は、実際にそのオブジェクトへの参照が渡されるか格納されます。When the object is used as a parameter in a call or is stored in a variable, a reference to the object is actually passed or stored.

value class キーワードと value struct キーワードを指定すると、コンパイラは、割り当てられたクラスまたは構造体の値を関数に渡すか、メンバーに格納します。The value class and value struct keywords tells the compiler that the value of the allocated class or structure is passed to functions or stored in members.

要件Requirements

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

関連項目See also

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