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 unset
accesseur qui affecte la valeur de propriété, unget
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 ouset
définis parget
l’utilisateur. La propriété est en lecture et en écriture si les accesseurs et lesget
accesseurs sont définis, en lecture seule si seul l’accesseurget
est défini et en écriture seule si seul l’accesseurset
estset
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 le
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
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é, default
sert 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 typeT
de retour .La
set
méthode a un paramètre de typeT
et un typevoid
de 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 mots clés 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