property
(C++/CLI e C++/CX)
Dichiara una proprietà, che è una funzione membro che si comporta e a cui è possibile accedere come un membro dati o un elemento di matrice.
Tutti i runtime
È possibile dichiarare uno dei seguenti tipi di proprietà.
proprietà semplice
Per impostazione predefinita, crea unaset
funzione di accesso che assegna il valore della proprietà, unaget
funzione di accesso che recupera il valore della proprietà e un membro dati privato generato dal compilatore che contiene il valore della proprietà.blocco di proprietà
Usare un blocco di proprietà per creare funzioni di accesso oset
definite dall'utenteget
. La proprietà è di lettura e scrittura se entrambe leget
funzioni di accesso eset
sono definite, di sola lettura se è definita solo laget
funzione di accesso e di sola scrittura se viene definita solo laset
funzione di accesso.È necessario dichiarare in modo esplicito un membro dati per contenere il valore della proprietà.
proprietà indicizzata
Un blocco di proprietà che è possibile usare per ottenere e impostare un valore della proprietà specificato da uno o più indici.È possibile creare una proprietà indicizzata con un nome di proprietà definito dall'utente o un nome di proprietà predefinito. Il nome di una proprietà indicizzata predefinito è il nome della classe in cui la proprietà è definita. Per dichiarare una proprietà predefinita, specificare la
default
parola chiave anziché un nome di proprietà.
Dichiarare in modo esplicito un membro dati per contenere il valore della proprietà. Per una proprietà indicizzata, il membro dati è in genere una matrice o una raccolta.
Sintassi
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};
}
Parametri
type
Tipo di dati del valore della proprietà e della proprietà stessa.
property_name
Nome della proprietà.
access-modifier
Un qualificatore di accesso. I qualificatori validi sono static
e virtual
.
Le get
funzioni di accesso o set
non devono essere d'accordo virtual
sul qualificatore, ma devono essere d'accordo static
sul qualificatore.
inheritance-modifier
Un qualificatore di ereditarietà. I qualificatori validi sono abstract
e sealed
.
index_list
Un elenco delimitato da virgole di uno o più indici. Ogni indice è costituito da un tipo di indice e un identificatore facoltativo che può essere usato nel corpo del metodo di proprietà.
value
Valore da assegnare alla proprietà in un'operazione set
o da recuperare in un'operazione get
.
property_body
Corpo del metodo della proprietà della set
funzione di accesso o get
. property_body
Può utilizzare index_list
per accedere al membro dati della proprietà sottostante o come parametri nell'elaborazione definita dall'utente.
Windows Runtime
Per altre informazioni, vedere Proprietà (C++/CX).
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Sintassi
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];
}
Parametri
modifier
Un modificatore che può essere usato in una dichiarazione di proprietà o in un metodo della funzione di accesso get e set. I valori possibili sono static
e virtual
.
type
Il tipo di valore rappresentato dalla proprietà.
property_name
I parametri per il raise
metodo devono corrispondere alla firma del delegato.
index_list
Elenco delimitato da virgole di uno o più indici, specificato tra parentesi quadre (l'operatore pedice, []
). Per ogni indice, specificare un tipo e, facoltativamente, un identificatore che può essere usato nel corpo del metodo di proprietà.
Osservazioni:
Il primo esempio di sintassi mostra una proprietà semplice, che dichiara in modo esplicito entrambi i metodi set
e get
. Il compilatore crea automaticamente un campo privato per archiviare il valore della proprietà.
Il secondo esempio di sintassi mostra un blocco di proprietà, che dichiara in modo esplicito entrambi i metodi set
e get
.
Il terzo esempio di sintassi mostra una proprietà indicizzata definita dall'utente. Una proprietà indicizzata accetta parametri oltre al valore da impostare o recuperare. Specificare un nome per la proprietà. A differenza di una proprietà semplice, i set
metodi e get
di una proprietà index devono essere definiti in modo esplicito e pertanto è necessario specificare un nome per la proprietà .
Il quarto esempio di sintassi mostra una proprietà predefinita che fornisce l'accesso di tipo matrice a un'istanza del tipo. La parola chiave , default
, serve solo per specificare una proprietà predefinita. Il nome di una proprietà predefinita è il nome del tipo in cui la proprietà è definita.
La property
parola chiave può essere visualizzata in una classe, un'interfaccia o un tipo di valore. Una proprietà può avere una get
funzione (sola lettura), una set
funzione (solo scrittura) o entrambe (lettura/scrittura).
Un nome di proprietà non può corrispondere al nome della classe gestita che lo contiene. Il tipo restituito dalla funzione Get deve corrispondere al tipo dell'ultimo parametro di una funzione Set corrispondente.
Per il codice client una proprietà ha l'aspetto di un membro dati normale e può essere scritta o letta usando la stessa sintassi di un membro dati.
I get
metodi e set
non devono essere d'accordo virtual
sul modificatore.
L'accessibilità del get
metodo e set
può differire.
La definizione di un metodo di proprietà può essere visualizzata all'esterno del corpo della classe, come un metodo comune.
Il get
e il set
metodo per una proprietà devono concordare il static
modificatore.
Una proprietà è scalare se i relativi get
metodi e set
corrispondono alla descrizione seguente:
Il
get
metodo non ha parametri e ha il tipoT
restituito .Il
set
metodo ha un parametro di tipoT
e il tipovoid
restituito .
In un ambito con lo stesso identificatore deve essere dichiarata solo una proprietà scalare. Le proprietà scalari non possono essere sottoposte a overload.
Quando un membro dati di proprietà viene dichiarato, il compilatore inserisce nella classe un membro dati, noto a volte come "archivio di backup". Tuttavia, il nome del membro dati è di un formato in modo che non sia possibile fare riferimento al membro nell'origine come se fosse un membro dati effettivo della classe contenitore. ildasm.exe consente di visualizzare i metadati per il tipo e il nome generato dal compilatore per l'archivio di backup della proprietà.
È consentita un'accessibilità diversa per i metodi della funzione di accesso in un blocco di proprietà. Ovvero, il set
metodo può essere public
e il get
metodo può essere private
. Tuttavia, si tratta di un errore per un metodo di accesso per avere un'accessibilità meno restrittiva rispetto a quella nella dichiarazione della proprietà stessa.
property
è una parola chiave sensibile al contesto. Per altre informazioni, vedere Parole chiave sensibili al contesto.
Requisiti
Opzione del compilatore: /clr
Esempi
Nell'esempio seguente vengono illustrati la dichiarazione e l'uso di un membro dati di proprietà e di un blocco di proprietà. Viene inoltre illustrato che è possibile definire una funzione di accesso alla proprietà fuori dalla 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