property
(C++/CLI i C++/CX)
Deklaruje właściwość, która jest funkcją składową, która zachowuje się i jest uzyskiwana dostęp do elementu członkowskiego danych lub elementu tablicy.
Wszystkie środowiska uruchomieniowe
Można zadeklarować jeden z następujących typów właściwości.
właściwość simple
Domyślnie tworzy metodęset
dostępu, która przypisuje wartość właściwości, metodę dostępu pobierającąget
wartość właściwości oraz element członkowski danych prywatnych wygenerowany przez kompilator, który zawiera wartość właściwości.blok właściwości
Użyj bloku właściwości, aby utworzyć zdefiniowane przezget
użytkownika lubset
metody dostępu. Właściwość jest odczytywana i zapisywana, jeśliget
zarówno metody dostępu, jak iset
są zdefiniowane, tylko do odczytu, jeśliget
tylko metodę dostępu jest zdefiniowana, i tylko zapis, jeśli zdefiniowano tylkoset
metodę dostępu.Musisz jawnie zadeklarować element członkowski danych, aby zawierał wartość właściwości.
właściwość indeksowana
Blok właściwości, którego można użyć do pobierania i ustawiania wartości właściwości określonej przez co najmniej jeden indeks.Można utworzyć właściwość indeksowaną, która ma nazwę właściwości zdefiniowanej przez użytkownika lub domyślną nazwę właściwości. Nazwa domyślnej właściwości indeksu to nazwa klasy, w której zdefiniowano właściwość. Aby zadeklarować właściwość domyślną, określ
default
słowo kluczowe zamiast nazwy właściwości.
Jawnie zadeklaruj element członkowski danych, aby zawierał wartość właściwości. W przypadku właściwości indeksowanej element członkowski danych jest zazwyczaj tablicą lub kolekcją.
Składnia
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};
}
Parametry
type
Typ danych wartości właściwości i samej właściwości.
property_name
Nazwa właściwości.
access-modifier
Kwalifikator dostępu. Prawidłowe kwalifikatory to static
i virtual
.
Lub get
set
akcesoriów nie muszą zgadzać się na virtual
kwalifikator, ale muszą zgodzić się na static
kwalifikator.
inheritance-modifier
Kwalifikator dziedziczenia. Prawidłowe kwalifikatory to abstract
i sealed
.
index_list
Rozdzielana przecinkami lista co najmniej jednego indeksu. Każdy indeks składa się z typu indeksu i opcjonalnego identyfikatora, który może być używany w treści metody właściwości.
value
Wartość, która ma zostać przypisana do właściwości w set
operacji, lub pobrana w get
operacji.
property_body
Treść set
metody właściwości lub get
metody dostępu. Obiekt property_body
może użyć index_list
elementu , aby uzyskać dostęp do bazowego elementu członkowskiego danych właściwości lub jako parametry w przetwarzaniu zdefiniowanym przez użytkownika.
Środowisko wykonawcze systemu Windows
Aby uzyskać więcej informacji, zobacz Właściwości (C++/CX).
Wymagania
Opcja kompilatora: /ZW
środowiska uruchomieniowe w trakcie wykonania
Składnia
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];
}
Parametry
modifier
Modyfikator, który może być używany w deklaracji właściwości lub metodzie dostępu get/set. Możliwe wartości to static
i virtual
.
type
Typ wartości reprezentowanej przez właściwość .
property_name
Parametry dla raise
metody; muszą być zgodne z podpisem delegata.
index_list
Rozdzielana przecinkami lista co najmniej jednego indeksu określona w nawiasach kwadratowych (operator indeksu dolnego, []
). Dla każdego indeksu określ typ i opcjonalnie identyfikator, który może być używany w treści metody właściwości.
Uwagi
W pierwszym przykładzie składni przedstawiono prostą właściwość, która niejawnie deklaruje zarówno metodę , jak set
i get
. Kompilator automatycznie tworzy pole prywatne do przechowywania wartości właściwości.
Drugi przykład składni przedstawia blok właściwości, który jawnie deklaruje metodę set
i .get
Trzeci przykład składni przedstawia właściwość indeksu zdefiniowanego przez klienta. Właściwość indeksu przyjmuje parametry oprócz wartości, która ma zostać ustawiona lub pobrana. Określ nazwę właściwości. W przeciwieństwie do prostej właściwości metody set
i get
właściwości indeksu muszą być jawnie zdefiniowane, dlatego należy określić nazwę właściwości.
Czwarty przykład składni przedstawia właściwość domyślną, która zapewnia dostęp przypominający tablicę do wystąpienia typu. Słowo kluczowe , default
służy tylko do określania właściwości domyślnej. Nazwa właściwości domyślnej to nazwa typu, w którym zdefiniowano właściwość.
Słowo property
kluczowe może być wyświetlane w klasie, interfejsie lub typie wartości. Właściwość może mieć get
funkcję (tylko do odczytu), set
funkcję (tylko do zapisu) lub obie (odczyt-zapis).
Nazwa właściwości nie może być zgodna z nazwą klasy zarządzanej, która ją zawiera. Zwracany typ funkcji getter musi być zgodny z typem ostatniego parametru odpowiedniej funkcji setter.
W kodzie klienta właściwość ma wygląd zwykłego elementu członkowskiego danych i może być zapisywana na podstawie lub odczytywana przy użyciu tej samej składni co składowa danych.
Metody get
i set
nie muszą zgadzać się na virtual
modyfikator.
Dostępność get
metody i set
może się różnić.
Definicja metody właściwości może pojawić się poza treścią klasy, podobnie jak zwykła metoda.
Metoda get
i set
dla nieruchomości uzgadniają static
modyfikator.
Właściwość jest skalarna, jeśli jej get
metody pasują set
do następującego opisu:
Metoda
get
nie ma parametrów i ma zwracany typT
.Metoda
set
ma parametr typuT
, i zwraca typvoid
.
Istnieje tylko jedna właściwość skalarna zadeklarowana w zakresie o tym samym identyfikatorze. Nie można przeciążyć właściwości skalarnych.
Po zadeklarowaniu elementu członkowskiego danych właściwości kompilator wprowadza składową danych — czasami nazywaną magazynem zapasowym — w klasie. Jednak nazwa składowej danych jest taka, że nie można odwoływać się do składowej w źródle tak, jakby była to rzeczywista składowa danych zawierającej klasę. Użyj ildasm.exe, aby wyświetlić metadane typu i wyświetlić nazwę wygenerowaną przez kompilator dla magazynu kopii zapasowych właściwości.
Różne ułatwienia dostępu są dozwolone dla metod dostępu w bloku właściwości. Oznacza to, że set
metoda może być public
i get
metoda może być private
. Jednak jest to błąd metody dostępu, aby mieć mniej restrykcyjne ułatwienia dostępu niż to, co znajduje się w deklaracji samej właściwości.
property
jest kontekstowym słowem kluczowym. Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe.
Wymagania
Opcja kompilatora: /clr
Przykłady
Poniższy przykład przedstawia deklarację i użycie elementu członkowskiego danych właściwości i bloku właściwości. Pokazuje również, że można zdefiniować metodę dostępu właściwości poza klasą.
// 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
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows