propriété (extensions du composant C++)
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, consultez Propriétés (C++/CX).
Configuration requise
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
modificateur
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 (extensions du composant C++).
Pour plus d'informations sur les propriétés, consultez
Configuration requise
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