property (C++/CLI et 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.

Tous les runtimes

Vous pouvez déclarer un des types de propriétés suivants.

  • propriété simple
    Par défaut, crée un set accesseur qui affecte la valeur de propriété, un get accesseur qui récupère la valeur de propriété et un membre de données privé généré par le compilateur qui contient la valeur de propriété.

  • bloc de propriété
    Utilisez un bloc de propriétés pour créer des accesseurs ou set définis par get l’utilisateur. La propriété est en lecture et en écriture si les accesseurs et les get accesseurs sont définis, en lecture seule si seul l’accesseur get est défini et en écriture seule si seul l’accesseur set est set défini.

    Vous devez déclarer explicitement un membre de données pour contenir la valeur de propriété.

  • propriété indexée
    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.

    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. 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. Pour déclarer une propriété par défaut, spécifiez la default mot clé au lieu d’un nom de propriété.

Déclarez explicitement un membre de données pour contenir la valeur de propriété. Pour une propriété indexée, le membre de données est en général un tableau ou une collection.

Syntaxe

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ètres

type
Type de données de la valeur de propriété et de la propriété elle-même.

property_name
Le nom de la propriété.

access-modifier
Qualificateur d'accès. Les qualificateurs valides sont static et virtual.

Les get accesseurs ou set les accesseurs n’ont pas besoin d’accepter le virtual qualificateur, mais ils doivent accepter le static qualificateur.

inheritance-modifier
Qualificateur d'héritage. Les qualificateurs valides sont abstract et sealed.

index_list
Liste délimitée par des virgules d'un ou plusieurs index. 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é.

value
Valeur à affecter à la propriété dans une set opération ou à récupérer dans une get opération.

property_body
Corps de la méthode de propriété du ou get de l’accesseurset. Il property_body peut utiliser l’option index_list permettant d’accéder au membre de données de propriété sous-jacent ou en tant que paramètres dans le traitement défini par l’utilisateur.

Windows Runtime

Pour plus d’informations, consultez Propriétés (C++/CX).

Spécifications

Option du compilateur : /ZW

Common Language Runtime

Syntaxe

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ètres

modifier
Modificateur qui peut être utilisé sur une déclaration de propriété ou une méthode d’accesseur get/set. Les valeurs possibles sont static et virtual.

type
Type de la valeur représentée par la propriété.

property_name
Paramètre(s) de la raise méthode ; doit correspondre à la signature du délégué.

index_list
Liste délimitée par des virgules d’un ou plusieurs index, spécifiée entre crochets (opérateur d’indice, []). 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é.

Notes

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. Le compilateur crée automatiquement un champ privé pour stocker la valeur de la propriété.

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.

Le troisième exemple de syntaxe montre une propriété d’index définie par le client. Une propriété d'index prend des paramètres, en plus de la valeur à définir ou à récupérer. Spécifiez un nom pour la propriété. Contrairement à une propriété simple, les méthodes et get les set méthodes d’une propriété d’index doivent être définies explicitement, et vous devez donc spécifier un nom pour la propriété.

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. Le mot clé, defaultsert uniquement à spécifier une propriété par défaut. Le nom de la propriété par défaut correspond au nom du type dans lequel la propriété est définie.

Le property mot clé peut apparaître dans une classe, une interface ou un type valeur. Une propriété peut avoir une get fonction (lecture seule), une set fonction (écriture seule) ou les deux (lecture-écriture).

Un nom de propriété ne peut pas correspondre au nom de la classe managée qui la contient. 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.

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.

Les méthodes et set les get méthodes n’ont pas besoin d’être d’accord sur le virtual modificateur.

L’accessibilité de la méthode et set de l’accessibilité get peut différer.

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.

La get méthode et la set méthode d’une propriété sont d’accord sur le static modificateur.

Une propriété est scalaire si ses get méthodes correspondent set à la description suivante :

  • La get méthode n’a aucun paramètre et a le type Tde retour .

  • La set méthode a un paramètre de type Tet un type voidde retour.

Il ne doit y avoir qu'une seule propriété scalaire déclarée dans une portée avec le même identificateur. Les propriétés scalaires ne peuvent pas être surchargées.

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. Toutefois, le nom du membre de données est d’un formulaire 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. 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é.

Une accessibilité différente est autorisée pour les méthodes d'accesseur dans un bloc de propriété. Autrement dit, la set méthode peut être public et la get méthode peut être private. Toutefois, il s’agit d’une erreur pour qu’une méthode d’accesseur ait une accessibilité moins restrictive que la déclaration de la propriété elle-même.

property est un mot clé contextuel. Pour plus d’informations, consultez les mot clé sensibles au contexte.

Spécifications

Option du compilateur : /clr

Exemples

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é. Il montre également qu'un accesseur de propriété peut être défini en dehors d'une classe.

// 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 aussi

Extensions de composants pour .NET et UWP