Freigeben über


property (C++/CLI und C++/CX)

Deklariert eine Eigenschaft (property). Hierbei handelt es sich um eine Memberfunktion, die sich wie ein Datenmember oder ein Arrayelement verhält und wie diese aufgerufen wird.

Alle Laufzeiten

Sie können einen der folgenden Typen von Eigenschaften deklarieren.

  • simple property (einfache Eigenschaft)
    Erstellt standardmäßig einen set Accessor, der den Eigenschaftswert, einen get Accessor, der den Eigenschaftswert abruft, und einen vom Compiler generierten privaten Datenmemm, der den Eigenschaftswert enthält.

  • property block (Eigenschaftenblock)
    Verwenden Sie einen Eigenschaftenblock, um benutzerdefinierte get oder set Accessoren zu erstellen. Die Eigenschaft ist lese- und schreibgeschützt, wenn sowohl die Accessoren als set auch accessoren get definiert sind, schreibgeschützt, wenn nur der get Accessor definiert ist, und schreibgeschützt, wenn nur der set Accessor definiert ist.

    Sie müssen ein Datenmemmemm explizit deklarieren, um den Eigenschaftswert zu enthalten.

  • indexed property (indizierte Eigenschaft)
    Ein Property-Block, mit dem Sie einen Eigenschaftswert abrufen und festlegen können, der durch einen oder mehrere Indizes angegeben wird.

    Sie können eine indizierte Eigenschaft erstellen, die entweder einen benutzerdefinierten Eigenschaftsnamen oder einen standardmäßigen (default) Eigenschaftsnamen aufweist. Der Name der Standardindexeigenschaft ist der Name der Klasse, in der die Eigenschaft definiert ist. Um eine Standardeigenschaft zu deklarieren, geben Sie das default Schlüsselwort anstelle eines Eigenschaftsnamens an.

Deklarieren Sie explizit ein Datenmem, das den Eigenschaftswert enthält. Bei einer indizierten Eigenschaft ist das Datenmember in der Regel ein Array oder eine Sammlung.

Syntax

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};
}

Parameter

type
Der Datentyp des Eigenschaftswerts und der Eigenschaft selbst.

property_name
Der Name der Eigenschaft.

access-modifier
Ein Zugangsqualifizierer. Gültige Qualifizierer sind static und virtual.

set Die get Accessoren müssen sich nicht auf den virtual Qualifizierer einigen, aber sie müssen sich auf den static Qualifizierer einigen.

inheritance-modifier
Ein Vererbungqualifizierer. Gültige Qualifizierer sind abstract und sealed.

index_list
Eine durch Kommata getrennte Liste von einem oder mehreren Indizes. Jeder Index besteht aus einem Indextyp und einem optionalen Bezeichner, der im Methodentext der Eigenschaft verwendet werden kann.

value
Der Wert, der der Eigenschaft in einem set Vorgang zugewiesen oder in einem get Vorgang abgerufen werden soll.

property_body
Der Eigenschaftenmethodentext des set Oder get Accessors. Dies property_body kann für den index_list Zugriff auf das zugrunde liegende Eigenschaftsdatenmemm oder als Parameter in der benutzerdefinierten Verarbeitung verwendet werden.

Windows-Runtime

Weitere Informationen finden Sie unter Eigenschaften (C++/CX).

Anforderungen

Compileroption: /ZW

Übersicht: Common Language Runtime (CLR)

Syntax

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];
}

Parameter

modifier
Ein Modifizierer, der entweder für eine Eigenschaftendeklaration oder eine Get-/Set-Zugriffsmethode verwendet werden kann. Mögliche Werte sind static und virtual.

type
Der Typ des Werts, der durch die Eigenschaft dargestellt wird.

property_name
Parameter für die raise Methode; muss mit der Signatur des Delegaten übereinstimmen.

index_list
Eine durch Trennzeichen getrennte Liste eines oder mehrerer Indizes, die in eckigen Klammern angegeben sind (der Tiefstellungsoperator, []). Geben Sie für jeden Index einen Typ und optional einen Bezeichner an, der im Methodentext der Eigenschaft verwendet werden kann.

Hinweise

Das erste Syntaxbeispiel zeigt eine einfache Eigenschaft (simple property), die implizit eine set- und eine get-Methode deklariert. Der Compiler erstellt automatisch ein privates Feld für die Speicherung des Werts der Eigenschaft.

Das zweite Syntaxbeispiel zeigt einen Eigenschaftenblock (property block), der explizit eine set- und eine get-Methode deklariert.

Das dritte Syntaxbeispiel zeigt eine benutzerdefinierte Indexeigenschaft (index property). Eine Indexeigenschaft nimmt zusätzlich zu dem festzulegenden oder abzurufenden Wert Parameter. Geben Sie einen Namen für die Eigenschaft an. Im Gegensatz zu einer einfachen Eigenschaft müssen die set Methoden und get Methoden einer Indexeigenschaft explizit definiert werden. Daher müssen Sie einen Namen für die Eigenschaft angeben.

Das vierte Syntaxbeispiel zeigt eine Standardeigenschaft (default), die arrayähnlichen Zugriff auf eine Instanz des Typs bereitstellt. Das Schlüsselwort dient defaultnur zum Angeben einer Standardeigenschaft. Der Name der Standardeigenschaft ist der Name des Typs, in dem die Eigenschaft definiert ist.

Das property Schlüsselwort kann in einer Klasse, Schnittstelle oder einem Werttyp angezeigt werden. Eine Eigenschaft kann eine get Funktion (schreibgeschützt), eine set Funktion (schreibgeschützt) oder beides (Lese-/Schreibzugriff) aufweisen.

Ein Eigenschaftenname kann nicht mit dem Namen der verwalteten Klasse übereinstimmen, die sie enthält. Der Rückgabetyp der Getter-Funktion muss dem Typ des letzten Parameters einer entsprechenden Setter-Funktion entsprechen.

Für Clientcode sieht eine Eigenschaft wie ein gewöhnliches Datenmember aus, und es kann anhand der gleichen Syntax wie bei einem Datenmember in sie geschrieben oder aus ihr gelesen werden.

Die get Und set Methoden müssen sich nicht auf den virtual Modifizierer einigen.

Die Barrierefreiheit der Methode und set der get Barrierefreiheit kann unterschiedlich sein.

Die Definition einer Eigenschaftenmethode kann außerhalb des Klassentexts angezeigt werden, genau wie eine normale Methode.

Die get Und die set Methode für ein Eigentum stimmen dem static Modifizierer zu.

Eine Eigenschaft ist skalar, wenn ihre get und set Methoden der folgenden Beschreibung entsprechen:

  • Die get Methode hat keine Parameter und hat den Rückgabetyp T.

  • Die set Methode weist einen Parameter vom Typ Tund den Rückgabetyp voidauf.

Es darf nur eine skalare Eigenschaft in einem Bereich mit dem gleichen Bezeichner deklariert werden. Skalare Eigenschaften können nicht überladen werden.

Wenn ein Eigenschaftendatenmember deklariert wird, fügt der Compiler ein Datenmember – auch als „Sicherungsspeicher“ bezeichnet – in der Klasse ein. Der Name des Datenmememers weist jedoch ein Formular auf, sodass Sie nicht auf das Element in der Quelle verweisen können, als wäre es ein tatsächliches Datenmememm der enthaltenden Klasse. Zeigen Sie mithilfe von ildasm.exe die Metadaten für den Typ und den vom Compiler generierten Namen für den Sicherungsspeicher der Eigenschaft an.

Für die Zugriffsmethoden sind unterschiedliche Zugriffsmöglichkeiten in einem Property-Block zulässig. Das heißt, die set Methode kann sein public und die get Methode kann sein private. Es ist jedoch ein Fehler für eine Accessor-Methode, eine weniger restriktive Barrierefreiheit zu haben als das, was sich in der Deklaration der Eigenschaft selbst befindet.

property ist ein kontextbezogenes Schlüsselwort. Weitere Informationen finden Sie unter Kontextabhängige Schlüsselwörter.

Anforderungen

Compileroption: /clr

Beispiele

Das folgende Beispiel zeigt die Deklaration und Verwendung eines Eigenschaftendatenmembers und eines Property-Blocks. Es zeigt auch, dass ein Eigenschaftenaccessor außerhalb der Klasse definiert werden kann.

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

Siehe auch

Komponentenerweiterungen für .NET und UWP