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 einenset
Accessor, der den Eigenschaftswert, einenget
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 benutzerdefinierteget
oderset
Accessoren zu erstellen. Die Eigenschaft ist lese- und schreibgeschützt, wenn sowohl die Accessoren alsset
auch accessorenget
definiert sind, schreibgeschützt, wenn nur derget
Accessor definiert ist, und schreibgeschützt, wenn nur derset
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 default
nur 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ückgabetypT
.Die
set
Methode weist einen Parameter vom TypT
und den Rückgabetypvoid
auf.
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