property (C++/CLI および C++/CX)property (C++/CLI and C++/CX)

"プロパティ" を宣言します。これは、データ メンバーや配列要素と同様に機能し、アクセスできるメンバー関数です。Declares a property, which is a member function that behaves and is accessed like a data member or an array element.

すべてのランタイムAll Runtimes

次のいずれかの種類のプロパティを宣言できます。You can declare one of the following types of properties.

"シンプル プロパティ"simple property
既定では、プロパティ値を割り当てる "set アクセサー"、プロパティ値を取得する "get アクセサー"、およびプロパティ値を含むプライベート データ メンバー (コンパイラにより生成) を作成します。By default, creates a set accessor that assigns the property value, a get accessor that retrieves the property value, and a compiler-generated private data member that contains the property value.

"プロパティ ブロック"property block
これを使用して、ユーザー定義の get アクセサーまたは set アクセサーを作成します。Use this to create user-defined get and/or set accessors. get アクセサーおよび set アクセサーの両方が定義されている場合、プロパティの読み取りと書き込みを実行できます。get アクセサーのみが定義されている場合、プロパティは読み取り専用です。set アクセサーのみが定義されている場合、プロパティは書き込み専用です。The property is read/write if both the get and set accessors are defined, read-only if only the get accessor is defined, and write-only if only the set accessor is defined.

プロパティ値を格納するデータ メンバーを明示的に宣言する必要があります。You must explicitly declare a data member to contain the property value.

"インデックス プロパティ"indexed property
1 つ以上のインデックスで指定されるプロパティの値を取得し設定するために使用できるプロパティ ブロック。A property block that you can use to get and set a property value that is specified by one or more indexes.

ユーザー定義のプロパティ名または "既定の" プロパティ名を持つインデックス プロパティを作成できます。You can create an indexed property that has either a user-defined property name or a default property name. 既定のインデックス プロパティの名前は、プロパティが定義されているクラスの名前です。The name of a default index property is the name of the class in which the property is defined. 既定のプロパティを宣言するには、プロパティ名ではなく default キーワードを指定します。To declare a default property, specify the default keyword instead of a property name.

プロパティ値を格納するデータ メンバーを明示的に宣言する必要があります。You must explicitly declare a data member to contain the property value. 通常、インデックス プロパティの場合、データ メンバーは配列またはコレクションになります。For an indexed property, the data member is typically an array or a collection.

構文Syntax

property type property_name;

property type property_name {
   access-modifier type get() inheritance-modifier {property_body};
   access-modifier void set(type value) inheritance-modifier {property_body};
}

property type property_name[index_list] {
   access-modifier type get(index_list) inheritance-modifier {property_body};
   access-modifier void set(index_list, value) inheritance-modifier {property_body};
}

property type default[index_list] {
   access-modifier type get(index_list) inheritance-modifier {property_body};
   access-modifier void set(index_list, value) inheritance-modifier {property_body};
}

パラメーターParameters

typetype
プロパティ値のデータ型、つまりプロパティ自体です。The data type of the property value, and consequently the property itself.

property_nameproperty_name
プロパティの名前。The name of the property.

access-modifieraccess-modifier
アクセス修飾子。An access qualifier. 有効な修飾子は staticvirtual です。Valid qualifiers are static and virtual.

get アクセサーまたは set アクセサーの virtual 修飾子は一致する必要はありませんが、static 修飾子は一致する必要があります。The get or set accessors need not agree on the virtual qualifier, but they must agree on the static qualifier.

inheritance-modifierinheritance-modifier
継承修飾子。An inheritance qualifier. 有効な修飾子は abstractsealed です。Valid qualifiers are abstract and sealed.

index_listindex_list
1 つ以上のインデックスのコンマ区切りのリスト。A comma-delimited list of one or more indexes. 各インデックスは、インデックスの型と、プロパティ メソッドの本文で使用できる識別子 (省略可能) で構成されます。Each index consists of an index type, and an optional identifier that can be used in the property method body.

valuevalue
set 操作でプロパティに代入される値、または get 操作で取得される値。The value to assign to the property in a set operation, or retrieve in a get operation.

property_bodyproperty_body
set アクセサーまたは get アクセサーのプロパティ メソッドの本体。The property method body of the set or get accessor. property_body では、index_list を、基になるプロパティ データ メンバーにアクセスするために使用するか、ユーザー定義処理のパラメーターとして使用できます。The property_body can use the index_list to access the underlying property data member, or as parameters in user-defined processing.

Windows ランタイムWindows Runtime

詳細については、「プロパティ (C++/CX)」を参照してください。For more information, see Properties (C++/CX).

要件Requirements

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

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

構文Syntax

modifier property type property_name;

modifier property type property_name {
   modifier void set(type);
   modifier type get();
}
modifier property type property_name[index-list, value] {
   modifier void set(index-list, value);
   modifier type get(index-list);

modifier property type default[index];
}

パラメーターParameters

modifiermodifier
プロパティの宣言または get/set アクセサー メソッドで使用できる修飾子。A modifier that can be used on either a property declaration or a get/set accessor method. 可能な値は staticvirtual です。Possible values are static and virtual.

typetype
プロパティで表される値の型。The type of the value that is represented by the property.

property_nameproperty_name
raise メソッドのパラメーター。デリゲートのシグネチャと一致する必要があります。Parameter(s) for the raise method; must match the signature of the delegate.

index_listindex_list
1 つ以上のインデックスのリスト (コンマ区切り)。角かっこ (添字演算子 []) で囲んで指定します。A comma-delimited list of one or more indexes, specified in square brackets (the subscript operator, ([])). 各インデックスについて型を指定し、さらに必要に応じてプロパティ メソッドの本文で使用できる識別子も指定します。For each index, specify a type and optionally an identifier that can be used in the property method body.

解説Remarks

最初の構文例では、"シンプル プロパティ" を示します。ここでは set メソッドと get メソッドの両方を暗黙的に宣言しています。The first syntax example shows a simple property, which implicitly declares both a set and get method. コンパイラは自動的にプロパティの値を格納するためのプライベート フィールドを作成します。The compiler automatically creates a private field to store the value of the property.

2 つ目の構文例では、"プロパティ ブロック" を示します。ここでは set メソッドと get メソッドの両方を明示的に宣言しています。The second syntax example shows a property block, which explicitly declares both a set and get method.

3 つ目の構文例では、ユーザー定義の "インデックス プロパティ" を示します。The third syntax example shows a customer-defined index property. インデックス プロパティは、設定または取得する値だけでなくパラメーターも受け取ります。An index property takes parameters in addition to the value to be set or retrieved. プロパティに名前を指定する必要があります。You must specify a name for the property. シンプル プロパティとは異なり、インデックス プロパティの set メソッドと get メソッドは明示的に定義する必要があり、さらにプロパティの名前も指定する必要がありますUnlike a simple property, the set and/or get methods of an index property must be explicitly defined, and you must specify a name for the property.

4 つ目の構文例では、型のインスタンスに対して配列と同様にアクセスできるようにする、"既定の" プロパティを示します。The fourth syntax example shows a default property, which provides array-like access to an instance of the type. default キーワードは、既定のプロパティを指定するためにのみ使用されます。The keyword, default, serves only to specify a default property. 既定のプロパティの名前は、プロパティが定義されている型の名前です。The name of the default property is the name of the type in which the property is defined.

property キーワードは、クラス、インターフェイス、または値の型で使用できます。The property keyword can appear in a class, interface, or value type. プロパティには get 関数 (読み取り専用)、set 関数 (書き込み専用)、またはその両方 (読み取り/書き込み) を定義できます。A property can have a get function (read-only), a set function (write-only), or both (read-write).

プロパティ名は、それ自身が含まれるマネージド クラスの名前と同じにすることはできません。A property name cannot match the name of the managed class that contains it. getter 関数の戻り値の型は、対応する setter 関数の最後のパラメーターの型と一致する必要があります。The return type of the getter function must match the type of the last parameter of a corresponding setter function.

クライアント コードに対しては、プロパティは通常のデータ メンバーと同じように扱うことができ、データ メンバーと同じ構文を使用して書き込みまたは読み取りを実行できます。To client code, a property has the appearance of an ordinary data member, and can be written to or read from by using the same syntax as a data member.

get メソッドと set メソッドのvirtual 修飾子は一致する必要はありません。The get and set methods need not agree on the virtual modifier.

get メソッドと set メソッドのアクセシビリティが異なっていても問題ありません。The accessibility of the get and set method can differ.

プロパティ メソッドの定義は、通常のメソッドと同様に、クラスの本文の外でも表示できます。The definition of a property method can appear outside the class body, just like an ordinary method.

プロパティの get メソッドと set メソッドの static 修飾子は一致している必要があります。The get and the set method for a property shall agree on the static modifier.

プロパティの get メソッドと set メソッドが次の説明に適合している場合、そのプロパティはスカラーです。A property is scalar if its get and set methods fit the following description:

  • get メソッドにはパラメーターがなく、戻り値の型は T です。The get method has no parameters, and has return type T.

  • set メソッドには T 型のパラメーターがあり、戻り値の型は void です。The set method has a parameter of type T, and return type void.

同じ ID のスコープ内では、1 つのスカラー プロパティしか宣言できません。There shall be only one scalar property declared in a scope with the same identifier. スカラー プロパティはオーバーロードできません。Scalar properties cannot be overloaded.

プロパティ データ メンバーを宣言すると、コンパイラはクラスにデータ メンバーを挿入します。このデータ メンバーは "バッキング ストア" とも呼ばれます。When a property data member is declared, the compiler injects a data member—sometimes referred to as the "backing store"—in the class. ただし、このデータ メンバーの名前は、外側のクラスの実際のデータ メンバーであるかのように、ソース内のメンバーを参照できないような形式になっています。However, the name of the data member is of a form such that you cannot reference the member in the source as if it were an actual data member of the containing class. 型のメタデータを表示し、プロパティのバッキング ストアに対してコンパイラが生成した名前を確認するには、ildasm.exe を使用します。Use ildasm.exe to view the metadata for your type and see the compiler-generated name for the property's backing store.

プロパティ ブロック内のアクセサー メソッドについては、異なるアクセシビリティが許容されます。Different accessibility is allowed for the accessor methods in a property block. つまり、set メソッドをパブリックに、get メソッドをプライベートにすることができます。That is, the set method can be public and the get method can be private. ただし、アクセサー メソッドのアクセシビリティが、プロパティ自体の宣言でのアクセシビリティよりも制限が少ない場合、エラーになります。However, it is an error for an accessor method to have a less restrictive accessibility than what is on the declaration of the property itself.

property は状況依存キーワードです。property is a context-sensitive keyword. 詳細については、「状況依存キーワード」を参照してください。For more information, see Context-Sensitive Keywords.

要件Requirements

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

使用例Examples

次の例は、プロパティのデータ メンバーとプロパティ ブロックの宣言方法と使用方法を示しています。The following example shows the declaration and use of a property data member and a property block. これにより、プロパティ アクセサーがクラスから定義できることもわかります。It also shows that a property accessor can be defined out of class.

// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
   int MyInt;
public:

   // property data member
   property String ^ Simple_Property;

   // property block
   property int Property_Block {

      int get();

      void set(int value) {
         MyInt = value;
      }
   }
};

int C::Property_Block::get() {
   return MyInt;
}

int main() {
   C ^ MyC = gcnew C();
   MyC->Simple_Property = "test";
   Console::WriteLine(MyC->Simple_Property);

   MyC->Property_Block = 21;
   Console::WriteLine(MyC->Property_Block);
}
test

21

関連項目See also

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