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 una set funzione di accesso che assegna il valore della proprietà, una get 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 o set definite dall'utenteget. La proprietà è di lettura e scrittura se entrambe le get funzioni di accesso e set sono definite, di sola lettura se è definita solo la get funzione di accesso e di sola scrittura se viene definita solo la set 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 tipo Trestituito .

  • Il set metodo ha un parametro di tipo Te il tipo voidrestituito .

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

Vedi anche

Estensioni componenti per .NET e UWP