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 przez get użytkownika lub set metody dostępu. Właściwość jest odczytywana i zapisywana, jeśli get zarówno metody dostępu, jak i set są zdefiniowane, tylko do odczytu, jeśli get tylko metodę dostępu jest zdefiniowana, i tylko zapis, jeśli zdefiniowano tylko set 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 getset 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 , defaultsł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 typ T.

  • Metoda set ma parametr typu T, i zwraca typ void.

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 pliku 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