Freigeben über


property (Komponentenerweiterungen für C++)

Deklariert eine Eigenschaft, die eine Memberfunktion ist und deren Verhalten und für die der Zugriff sich wie bei einem Datenmember oder einem Arrayelement verhalten.

Alle Laufzeiten

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

  • Einfache Eigenschaft.
    Erstellt standardmäßig einen set-Accessor, der den Eigenschaftswert zuweist, einen get-Accessor, der den Eigenschaftswert abruft, und einen vom Compiler generierten privaten Datenmember, der den Eigenschaftswert enthält.

  • Eigenschaftsblock
    Verwenden Sie diese Eigenschaft, um benutzerdefinierte get- bzw. set-Accessoren zu erstellen. Die Eigenschaft ist lese- und schreibgeschützt, wenn der get- und der set-Accessor definiert sind, nur schreibgeschützt, wenn nur der get-Accessor definiert ist, und lesegeschützt, wenn nur der set-Accessor definiert ist.

    Sie müssen einen Datenmember explizit deklarieren, der den Eigenschaftswert enthalten soll.

  • Indizierte Eigenschaft
    Ein Eigenschaftsblock, 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 Eigenschaftennamen oder einen Standardeigenschaftsnamen hat. Der Name einer standardmäßigen Indexeigenschaft ist der Name der Klasse, in der die Eigenschaft definiert ist. Um eine Standardeigenschaft zu deklarieren, geben Sie das default-Schlüsselwort anstelle eines Eigenschaftennamens an.

    Sie müssen einen Datenmember explizit deklarieren, der den Eigenschaftswert enthalten soll. Für eine indizierte Eigenschaft ist der Datenmember in der Regel ein Array oder eine Auflistung.

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 folglich die Eigenschaft selbst.

  • property_name
    Der Name der Eigenschaft.

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

    Die get- und set-Accessoren müssen nicht denselben virtual-Qualifizierer haben, sie müssen jedoch beim static-Qualifizierer übereinstimmen.

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

  • index_list
    Eine durch Komma getrennte Liste von mindestens einem Index. Jeder Index besteht aus einem Indextyp und einem optionalen Bezeichner, der im Eigenschaftsmethodentext 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 Text der Eigenschaftsmethode des set- oder get-Accessors. property_body kann index_list verwenden, um auf den zugrunde liegenden Eigenschaftsdatenmember zuzugreifen, oder als Parameter in einer benutzerdefinierten Verarbeitung.

Windows-Runtime

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

Voraussetzungen

Compileroption: /ZW

Common Language Runtime

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 in einer Eigenschaftendeklaration oder in einer get-/set-Accessormethode 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 Auslöse-Methode, der oder die mit der Signatur des Delegaten übereinstimmen muss/müssen.

  • index_list
    Eine durch Komma getrennte Liste mit einem oder mehreren Indizes, die in eckigen Klammern (tiefgestellte Operator, ([])) angegeben sind. Für jeden Index geben Sie einen Typ und optional einen Bezeichner an, die im Eigenschaftsmethodentext verwendet werden können.

Hinweise

Im ersten Syntaxbeispiel wird eine einfache Eigenschaft dargestellt, die implizit eine set- und eine get-Methode deklariert. Der Compiler erstellt automatisch ein privates Feld, um den Wert der Eigenschaft zu speichern.

Im zweiten Syntaxbeispiel wird ein Eigenschaftsblock dargestellt, der explizit eine set- und eine get-Methode deklariert.

Im dritten Syntaxbeispiel wird eine vom Kunden definierte Indexeigenschaft dargestellt. Eine Indexeigenschaft übernimmt Parameter zusätzlich zu dem Wert, der festgelegt oder abgerufen werden muss. Sie müssen einen Namen für die Eigenschaft angeben. Im Unterschied zu einer einfachen Eigenschaft müssen die set- und/oder get-Methoden einer Indexeigenschaft explizit definiert werden, und Sie müssen einen Namen für die Eigenschaft angeben.

Im vierten Syntaxbeispiel wird eine Standardeigenschaft dargestellt, die arrayähnlichen Zugriff auf eine Instanz des Typs bietet. Das Schlüsselwort default dient nur dazu, eine Standardeigenschaft anzugeben. Der Name der standardmäßigen Eigenschaft ist der Name des Typs, in dem die Eigenschaft definiert ist.

Das property-Schlüsselwort kann in einer Klasse, einer Schnittstelle oder einem Werttyp angezeigt werden. Eine Eigenschaft kann über eine get-Funktion (schreibgeschützt), eine set-Funktion (lesegeschützt) oder beide Funktionen (Lese-/Schreibzugriff) verfügen.

Ein Eigenschaftenname darf nicht mit dem Namen der verwalteten Klasse übereinstimmen, in der er enthalten ist. Der Rückgabetyp der Getter-Funktion muss dem Typ des letzten Parameters einer entsprechenden Setter-Funktion entsprechen.

Für Clientcode hat eine Eigenschaft das Aussehen eines gewöhnlichen Datenmembers. Sie können mit derselben Syntax wie bei einem Datenmember in die Eigenschaft schreiben und sie lesen.

Die get-Methode und die set-Methode müssen nicht denselben virtual-Modifizierer haben.

Der Zugriff auf die get-Methode und die set-Methode kann unterschiedlich sein.

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

Die get- und die set-Methode für eine Eigenschaft sollten denselben static-Modifizierer haben.

Eine Eigenschaft ist skalar, wenn die entsprechende get- und set-Methode folgender Beschreibung entspricht:

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

  • Die set-Methode verfügt über einen Parameter des Typs T und hat den Rückgabetyp void.

Es sollte nur eine skalare Eigenschaft geben, die in einem Bereich mit dem gleichen Bezeichner deklariert wird. Skalare Eigenschaften dürfen nicht überladen werden.

Wenn ein Eigenschaftsdatenmember deklariert ist, fügt der Compiler einen Datenmember in die Klasse ein. Dieser wird manchmal als "Sicherungsspeicher" bezeichnet. Der Name des Datenmembers muss so formuliert sein, dass Sie nicht so auf den Member in der Quelle nicht verweisen können, als ob er ein tatsächlicher Datenmember der enthaltenen Klasse sei. Verwenden Sie ildasm.exe, um die Metadaten für den Typ anzuzeigen und den vom Compiler generierten Namen für den Sicherungsspeicher der Eigenschaft zu finden.

Für die Accessormethoden sind unterschiedliche Zugriffsmöglichkeiten in einem Eigenschaftsblock zulässig. Das bedeutet, dass die set-Methode öffentlich und die get-Methode privat sein kann. Es ist jedoch ein Fehler, wenn die Accessormethode weniger restriktiven Zugriff hat als in der Deklaration der Eigenschaft selbst vermerkt ist.

property ist ein kontextbezogenes Schlüsselwort. Weitere Informationen finden Sie unter Kontextbezogene Schlüsselwörter (Komponentenerweiterungen für C++).

Weitere Informationen zu Eigenschaften finden Sie unter

Voraussetzungen

Compileroption: /clr

Beispiele

Im folgenden Beispiel wird die Deklaration und Verwendung eines Eigenschaftsdatenmember und eines Eigenschaftsblock dargestellt. Darüber hinaus wird gezeigt, dass ein Eigenschaftsaccessor aus einer Klasse heraus 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);
}

Ausgabe

  
  

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen