propriété (C++/CLI et C++/CX)property (C++/CLI and C++/CX)

Déclare une propriété, qui est une fonction membre qui se comporte et est accessible comme un membre de données ou un élément de tableau.Declares a property, which is a member function that behaves and is accessed like a data member or an array element.

Tous les runtimesAll Runtimes

Vous pouvez déclarer un des types de propriétés suivants.You can declare one of the following types of properties.

propriété simplesimple property
Par défaut, crée un accesseur set qui assigne la valeur de la propriété, un accesseur get qui récupère la valeur de la propriété et un membre de données privé généré par le compilateur qui contient la valeur de la propriété.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.

bloc de propriétéproperty block
Utilisez-le pour créer des accesseurs get et/ou set définis par l'utilisateur.Use this to create user-defined get and/or set accessors. La propriété est en lecture/écriture si les accesseurs get et set sont définis, en lecture seule si seul l’accesseur get est défini et en écriture seule si seul l’accesseur set est défini.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.

Vous devez déclarer explicitement un membre de données pour qu'il contienne la valeur de la propriété.You must explicitly declare a data member to contain the property value.

propriété indexéeindexed property
Bloc de propriété que vous pouvez utiliser pour obtenir et définir une valeur de propriété qui est spécifiée par un ou plusieurs index.A property block that you can use to get and set a property value that is specified by one or more indexes.

Vous pouvez créer une propriété indexée qui porte un nom de propriété défini par l’utilisateur ou un nom de propriété par défaut.You can create an indexed property that has either a user-defined property name or a default property name. Le nom d'une propriété d'index par défaut correspond au nom de la classe dans laquelle la propriété est définie.The name of a default index property is the name of the class in which the property is defined. Pour déclarer une propriété par défaut, spécifiez le default mot clé à la place d’un nom de propriété.To declare a default property, specify the default keyword instead of a property name.

Vous devez déclarer explicitement un membre de données pour qu'il contienne la valeur de la propriété.You must explicitly declare a data member to contain the property value. Pour une propriété indexée, le membre de données est en général un tableau ou une collection.For an indexed property, the data member is typically an array or a collection.

SyntaxeSyntax

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};
}

ParamètresParameters

typetype
Type de données de la valeur de la propriété et donc la propriété proprement dite.The data type of the property value, and consequently the property itself.

property_nameproperty_name
Nom de la propriété.The name of the property.

access-modifieraccess-modifier
Qualificateur d'accès.An access qualifier. Les qualificateurs valides sont static et virtual .Valid qualifiers are static and virtual.

Les accesseurs d’extraction ou de définition n’ont pas besoin de s’accorder sur le virtual qualificateur, mais ils doivent s’accorder sur le static qualificateur.The get or set accessors need not agree on the virtual qualifier, but they must agree on the static qualifier.

inheritance-modifierinheritance-modifier
Qualificateur d'héritage.An inheritance qualifier. Les qualificateurs valides sont abstract et sealed.Valid qualifiers are abstract and sealed.

index_listindex_list
Liste délimitée par des virgules d'un ou plusieurs index.A comma-delimited list of one or more indexes. Chaque index se compose d'un type d'index et d'un identificateur facultatif qui peut être utilisé dans le corps de la méthode de propriété.Each index consists of an index type, and an optional identifier that can be used in the property method body.

valuevalue
Valeur à affecter à la propriété dans une opération set ou à récupérer dans une opération get.The value to assign to the property in a set operation, or retrieve in a get operation.

property_bodyproperty_body
Corps de la méthode de propriété de l'accesseur set ou get.The property method body of the set or get accessor. property_body peut utiliser index_list pour accéder au membre de données de propriété sous-jacent, ou en tant que paramètres dans le cadre du traitement défini par l’utilisateur.The property_body can use the index_list to access the underlying property data member, or as parameters in user-defined processing.

Windows RuntimeWindows Runtime

Pour plus d’informations, consultez Propriétés (C++/CX).For more information, see Properties (C++/CX).

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

Common Language RuntimeCommon Language Runtime

SyntaxeSyntax

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];
}

ParamètresParameters

modificateurmodifier
Modificateur qui peut être utilisé sur une déclaration de propriété ou une méthode d’accesseur get/set.A modifier that can be used on either a property declaration or a get/set accessor method. Les valeurs possibles sont static et virtual .Possible values are static and virtual.

typetype
Type de la valeur représentée par la propriété.The type of the value that is represented by the property.

property_nameproperty_name
Paramètre(s) de la méthode raise ; doit correspondre à la signature du délégué.Parameter(s) for the raise method; must match the signature of the delegate.

index_listindex_list
Liste délimitée par des virgules d'un ou plusieurs index, spécifiés entre crochets (opérateur d'indice, ([])).A comma-delimited list of one or more indexes, specified in square brackets (the subscript operator, ([])). Pour chaque index, spécifiez un type et éventuellement un identificateur qui peut être utilisé dans le corps de la méthode de propriété.For each index, specify a type and optionally an identifier that can be used in the property method body.

NotesRemarks

Le premier exemple de syntaxe montre une propriété simple, qui déclare implicitement à la fois une méthode set et une méthode get.The first syntax example shows a simple property, which implicitly declares both a set and get method. Le compilateur crée automatiquement un champ privé pour stocker la valeur de la propriété.The compiler automatically creates a private field to store the value of the property.

Le deuxième exemple de syntaxe présente un bloc de propriété, qui déclare explicitement une méthode set et une méthode get.The second syntax example shows a property block, which explicitly declares both a set and get method.

Le troisième exemple de syntaxe montre une propriété d’index définie par le client.The third syntax example shows a customer-defined index property. Une propriété d'index prend des paramètres, en plus de la valeur à définir ou à récupérer.An index property takes parameters in addition to the value to be set or retrieved. Vous devez spécifier un nom pour la propriété.You must specify a name for the property. Contrairement à une propriété simple, les méthodes set et/ou get d'une propriété d'index doivent être définies explicitement, et vous devez spécifier un nom pour la propriété.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.

Le quatrième exemple de syntaxe montre une propriété par défaut, qui fournit un accès de type tableau à une instance du type.The fourth syntax example shows a default property, which provides array-like access to an instance of the type. Le mot clé, default , sert uniquement à spécifier une propriété par défaut.The keyword, default, serves only to specify a default property. Le nom de la propriété par défaut correspond au nom du type dans lequel la propriété est définie.The name of the default property is the name of the type in which the property is defined.

Le property mot clé peut apparaître dans une classe, une interface ou un type valeur.The property keyword can appear in a class, interface, or value type. Une propriété peut avoir une fonction get (lecture seule), une fonction set (écriture seule) ou les deux (lecture-écriture).A property can have a get function (read-only), a set function (write-only), or both (read-write).

Un nom de propriété ne peut pas correspondre au nom de la classe managée qui la contient.A property name cannot match the name of the managed class that contains it. Le type de retour de la fonction d’accesseur Get doit correspondre au type du dernier paramètre d’une fonction d’accesseur Set correspondante.The return type of the getter function must match the type of the last parameter of a corresponding setter function.

Pour le code client, une propriété a l'apparence d'un membre de données ordinaire et peut être écrite ou lu à l'aide de la même syntaxe qu'un membre de données.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.

Les méthodes d’extraction et de définition n’ont pas besoin d’accepter le virtual modificateur.The get and set methods need not agree on the virtual modifier.

L'accessibilité des méthodes get et set peut différer.The accessibility of the get and set method can differ.

La définition d'une méthode de propriété peut apparaître en dehors du corps de la classe, comme une méthode ordinaire.The definition of a property method can appear outside the class body, just like an ordinary method.

La méthode d’extraction et la méthode Set d’une propriété doivent s’accorder sur le static modificateur.The get and the set method for a property shall agree on the static modifier.

Une propriété est scalaire si ses méthodes get et set correspondent à la description suivante :A property is scalar if its get and set methods fit the following description:

  • La méthode get n'a aucun paramètre et son type de retour est T.The get method has no parameters, and has return type T.

  • La méthode Set a un paramètre de type T , et le type de retour void .The set method has a parameter of type T, and return type void.

Il ne doit y avoir qu'une seule propriété scalaire déclarée dans une portée avec le même identificateur.There shall be only one scalar property declared in a scope with the same identifier. Les propriétés scalaires ne peuvent pas être surchargées.Scalar properties cannot be overloaded.

Quand un membre de données de propriété est déclaré, le compilateur injecte un membre de données (parfois appelé le « magasin de stockage ») dans la classe.When a property data member is declared, the compiler injects a data member—sometimes referred to as the "backing store"—in the class. Toutefois, le nom du membre de données est tel que vous ne pouvez pas référencer le membre dans la source comme s'il s'agissait d'un membre de données réel de la classe conteneur.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. Utilisez ildasm.exe pour afficher les métadonnées de votre type et voir le nom généré par le compilateur pour le magasin de stockage de la propriété.Use ildasm.exe to view the metadata for your type and see the compiler-generated name for the property's backing store.

Une accessibilité différente est autorisée pour les méthodes d'accesseur dans un bloc de propriété.Different accessibility is allowed for the accessor methods in a property block. Autrement dit, la méthode set peut être publique et la méthode get peut être privée.That is, the set method can be public and the get method can be private. Toutefois, c’est une erreur pour une méthode d’accesseur d’avoir une accessibilité moins restrictive que celle figurant dans la déclaration de la propriété proprement dite.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 est un mot clé contextuel.property is a context-sensitive keyword. Pour plus d’informations, consultez Mots clés contextuels.For more information, see Context-Sensitive Keywords.

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

L'exemple suivant illustre la déclaration et l'utilisation d'un membre de données de propriété et d'un bloc de propriété.The following example shows the declaration and use of a property data member and a property block. Il montre également qu'un accesseur de propriété peut être défini en dehors d'une classe.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

Voir aussiSee also

Extensions de composant pour .NET et UWPComponent Extensions for .NET and UWP