property (C++ Component Extensions)
Deklaruje Właściwość, która jest członkiem funkcji, który zachowuje się i jest dostępny, jak członek danych lub element tablicy.
Wszystkie środowiska wykonawcze
Możesz zadeklarować jeden z poniższych typów właściwości.
właściwość prosta
Domyślnie tworzy metodę dostępu zestawu który przypisuje wartość właściwości metody dostępu funkcji get, który pobiera wartość właściwości i element danych prywatnych generowanych przez kompilator, który zawiera wartość właściwości.blok właściwości
Użyj tego do utworzenia zdefiniowanych przez użytkownika metod dostępu get i/lub set.Właściwość ma charakter odczyt/zapis, jeśli obie metody dostępu – get i set – są zdefiniowane, tylko do odczytu, jeśli tylko metoda dostępu get jest zdefiniowana, i tylko do zapisu, jeśli tylko metoda dostępu set jest zdefiniowana.Musisz jasno zadeklarować element członkowski danych, który ma zawierać wartość właściwości.
Właściwości indeksowane
Bloku właściwości, którego można użyć, aby uzyskać i ustawić wartość właściwości, który jest określony przez jeden lub kilku indeksów.Możesz utworzyć właściwość indeksowaną, która ma albo nazwę właściwości zdefiniowaną przez użytkownika, albo domyślną nazwę właściwości.Nazwa właściwości indeksu domyślnego jest nazwą klasy, w której właściwość ta jest zdefiniowana.Aby zadeklarować właściwość domyślną, użyj słowa kluczowego default zamiast nazwy właściwości.
Musisz jasno zadeklarować element członkowski danych, który ma zawierać wartość właściwości.Dla właściwości indeksowanej, członek 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 oraz samą właściwość.property_name
Nazwa właściwości.access-modifier
Kwalifikator dostępu.Prawidłowe kwalifikatory to static i virtual.Metody dostępu get lub set nie powinny być zgodne w zakresie kwalifikatora virtual, ale muszą być zgodne w zakresie kwalifikatora static.
inheritance-modifier
Kwalifikator dziedziczenia.Prawidłowe kwalifikatory to abstract i sealed.index_list
Rozdzielana przecinkami lista jednego lub kilku indeksów.Każdy indeks składa się z typu indeksu i opcjonalnego identyfikatora, który może używany w treści metody właściwość.value
Wartość, jaką należy przypisać właściwości przy użyciu operacji set lub pobrać przy użyciu operacji get.property_body
Treść metody właściwość metody dostępu set lub get.property_body może użyć index_list, aby uzyskać dostęp do elementu członkowskiego danych podlegającej właściwości lub jako parametru w procesie przetwarzania zdefiniowanym przez użytkownika.
Środowisko wykonawcze systemu Windows
Aby uzyskać więcej informacji, zobacz Właściwości (C + +/ CX).
Wymagania
Opcja kompilatora: /ZW
Środowisko uruchomieniowe języka wspólnego
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 może ustalić metodę oceny.Możliwe wartości to static i virtual.type
Typ wartości, która jest reprezentowana przez właściwość.property_name
Parametr(y) metody rozgłoś (raise); musi być zgodny z podpisem obiektu delegowanego.index_list
Rozdzielana przecinkami lista jednego lub kilku indeksów, określone w nawiasach kwadratowych (operator z granicą w indeksie, ([])).Dla każdego indeksu, określ typ i opcjonalnie identyfikator, który może być używany w treści metody właściwość.
Uwagi
W pierwszym przykładzie składni widać właściwość prostą, która deklaruje implicite zarówno metodę set, jak i metodę get.Kompilator automatycznie tworzy prywatne pole do przechowywania wartości właściwości.
W drugim przykładzie składni widać blok właściwości, który deklaruje explicite zarówno metodę set, jak i metodę get.
W trzecim przykładzie składni przedstawiono właściwość indeksu zdefiniowaną przez użytkownika.Właściwość indeksu pobiera parametry, oprócz wartości do funkcji zestaw lub pobranie.Należy określić nazwę właściwości.Inaczej niż w przypadku prostej właściwości, metody set i/lub get dla właściwości indeksu muszą być jawnie zdefiniowane oraz musi być określona nazwa właściwości.
W czwartym przykładzie składni pokazano właściwość domyślną, która zapewnia dostęp podobny, jak w przypadku tablicy, do instancji typu.Słowo kluczowe default służy tylko do określania domyślnej właściwości.Nazwa właściwości domyślnej jest nazwą typu, w którym właściwość ta jest zdefiniowana.
Słowo kluczowe property może się pojawiać w klasie, interfejsie lub typie wartości.Właściwość może mieć funkcję get (tylko do odczytu), funkcja zestaw (tylko do zapisu) lub obie (odczytu i zapisu).
Nazwa właściwości nie może pasować do klas zarządzanych, które ją zawierają.Typ zwracany funkcji pobierającej musi odpowiadać typowi ostatniego parametru odpowiadającej funkcji ustawiającej.
W przypadku kodu klienckiego właściwość wygląda jak zwykły element członkowski danych i można w niej dokonywać zapisu i odczytu przy użyciu tej samej składni, jak w przypadku elementu członkowskiego danych.
Metody get i set nie powinny być zgodne w zakresie modyfikatora virtual.
Dostępność metod get i set może się różnić.
Definicja metody właściwości może być wyświetlana poza ciałem klasy, podobnie jak zwykła metoda.
Metody get i set dla właściwości powinny być zgodne w zakresie modyfikatora static.
Właściwość jest skalarna jeśli jej metody funkcji get i funkcji zestawu mieszczą się w następującym opisie:
Metoda get nie ma żadnych parametrów i ma typ zwracany T.
Metoda set ma parametr typu T i typ zwracany void.
W danym zakresie może być zadeklarowana tylko jedna właściwość skalarna o tym samym identyfikatorze.Właściwości skalarne nie mogą być przeciążone.
Gdy element członkowski danych właściwości jest deklarowany, kompilator wstawia do klasy element członkowski danych — czasami określany jako "magazyn wspierający".Jednak nazwa członka danych ma taką formę, że nie można odwoływać się do członka w źródle tak, jakby był on rzeczywistym członkiem danych klasy zawierającej.Użyj ildasm.exe, aby wyświetlić metadane dla danego typu i zobaczyć nazwę magazynu właściwości wygenerowaną przez kompilator.
Różne ułatwienia dostępu są dozwolone dla metod typu accessor w bloku właściwości. To znaczy, że metoda set może być publiczna, a metoda get może być prywatna. Jednak to błąd, gdy metody dostępu ma mniej restrykcyjne ustawienia dostępu, niż jest to w deklaracji samej właściwości.
property jest słowem kluczowym uzależnionym od kontekstu. Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe (C++ Component Extensions).
Aby uzyskać więcej informacji na temat właściwości, zobacz
Wymagania
Opcja kompilatora: /clr
Przykłady
Poniższy przykład ilustruje sposób deklarowania i wykorzystywania elementu członkowskiego danych właściwości i bloku właściwości. Pokazuje także, że dostępy do właściwości są zdefiniowane 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);
}
Dane wyjściowe
Zobacz też
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego