Share via


propriété

Déclare une propriété, qui est une fonction membre qui se comporte et est accessible comme une donnée membre ou un élément de tableau.

Tous les runtimes

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

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

  • bloc de propriété
    Utilisez ceci pour créer les accesseurs get et/ou set définis par l'utilisateur. 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.

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

  • propriétés indexées
    Bloc Property que vous pouvez utiliser pour obtenir et définir une valeur de propriété spécifiée par un ou plusieurs index.

    Vous pouvez créer une propriété indexée qui possède 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 est le nom de la classe dans laquelle la propriété est définie. Pour déclarer une propriété par défaut, spécifiez le mot clé default au lieu d'un nom de propriété.

    Vous devez déclarer explicitement une donnée membre pour contenir la valeur de propriété. Pour une propriété indexée, la donnée membre est généralement 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 par conséquent 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 accesseurs get et set n'ont pas besoin d'être en accord sur le qualificateur virtual, mais doivent être en accord sur le qualificateur static.

  • 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 de 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 la propriété.

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

  • property_body
    Le corps de la méthode de la propriété de l'accesseur set et get. property_body peut utiliser index_list pour accéder aux données membre de propriété sous-jacentes ou en tant que paramètres dans le traitement défini par l'utilisateur.

Windows Runtime

Pour plus d'informations sur les propriétés, consultez Properties (C++/CX).

Conditions requises

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é dans 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) pour la méthode raise ; doit correspondre à la signature du délégué.

  • index_list
    Liste, délimitée par des virgules, d'un ou de plusieurs index spécifiés entre crochets (opérateur d'indice, ([])). Pour chaque index, spécifiez un type et éventuellement un identificateur qui peuvent être utilisés dans le corps de la méthode de propriété.

Remarques

Le premier exemple de syntaxe illustre une propriété simple, qui déclare implicitement une méthode set et get. Le compilateur crée automatiquement un champ privé pour stocker la valeur de la propriété.

Le deuxième exemple de syntaxe montre un bloc de propriété, qui déclare explicitement une méthode set et get.

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

Le quatrième exemple de syntaxe illustre une propriété par défaut, qui fournit l'accès de type tableau à une instance du type. Le mot clé, default, sert à spécifier uniquement une propriété par défaut. Le nom de la propriété d'index par défaut est le nom du type dans lequel la propriété est définie.

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

Un nom de propriété ne peut pas correspondre au nom de la classe managée qui le 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é possède l'apparence d'une donnée membre ordinaire et peut être accessible en écriture ou en lecture à l'aide de la même syntaxe qu'une donnée membre.

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

L'accessibilité de la méthode get et set peut être différente.

La définition d'une méthode de propriété peut apparaître à l'extérieur de la classe body, tout comme une méthode ordinaire.

Les méthodes get et set d'une propriété doivent être en accord sur le modificateur static.

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

  • La méthode get n'a aucun paramètre et possède le type de retour T.

  • La méthode set possède un paramètre de type T et un type de retour void.

Il ne doit y avoir qu'une 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.

Lorsqu'une donnée membre de propriété est déclarée, le compilateur injecte une donnée membre, parfois connue sous le nom de « magasin de stockage », dans la classe. Toutefois, le format du nom de la donnée membre ne vous permet pas de référencer le membre dans la source comme s'il s'agissait d'une donnée membre réelle 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 du 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 méthode set peut être publique et la méthode get peut être privée. Toutefois, une méthode d'accesseur dont l'accessibilité est moins restrictive que ce qui est indiqué dans la déclaration de la propriété elle-même constitue une erreur.

property est un mot clé contextuel. Pour plus d'informations, consultez mots clés contextuels.

Pour plus d'informations sur les propriétés, consultez

Conditions requises

Option du compilateur : /clr

Exemples

L'exemple suivant illustre la déclaration et l'utilisation d'une donnée membre de propriété et d'un bloc de propriété. Il indique également qu'un accesseur de propriété peut être défini hors 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);
}

Sortie

  
  

Voir aussi

Concepts

Fonctionnalités de langage pour cibler le CLR