delegate
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

delegate (C++ Component Extensions)

 

Deklariert einen Typ, der einen Funktionszeiger darstellt.

Windows-Runtime und Common Language Runtime unterstützen Delegaten.

delegate ist ein kontextbezogenes Schlüsselwort.Weitere Informationen finden Sie unter Context-Sensitive Keywords (C++ Component Extensions).

Um zur Kompilierungszeit zu erkennen, ob ein Typ ein Delegat ist, verwenden Sie das __is_delegate()-Typmerkmal.Weitere Informationen finden Sie unter Compiler Support for Type Traits (C++ Component Extensions).

C++/CX unterstützen Delegaten mit der folgenden Syntax.


access delegate return-type delegate-type-identifier ([ parameters ])

access

(optional) Der Zugriff des Delegaten, der public (Standard) oder private sein kann.Der Funktionsprototyp kann auch mit den Schlüsselwörtern const oder volatile qualifiziert werden.

return-type

Der Rückgabetyp des Funktionsprototypen.

delegate-type-identifier

Der Name des deklarierten Delegatentyps.

parameters

(Optional) Die Typen und die Bezeichner des Funktionsprototyps.

Verwenden Sie delegate-type-identifier, um ein Ereignis mit dem gleichen Prototyp wie der Delegat zu deklarieren.Weitere Informationen finden Sie unter Delegaten (C++/CX).

Compileroption: /ZW

Die Common Language Runtime unterstützt Delegaten mit der folgenden Syntax.


access delegate function_declaration

access

(optional) Der Zugriff des Delegaten außerhalb der Assembly kann öffentlich oder privat sein. Die Standardeinstellung ist "privat". Innerhalb einer Klasse kann ein Delegat jede Zugriffen aufweisen.

function_declaration

Die Signatur der Funktion, die an den Delegaten gebunden werden kann.Der Rückgabetyp eines Delegaten kann entweder verwalteter Typ sein.Aus Kompatibilitätsgründen wird empfohlen, dass der Rückgabetyp eines Delegaten ein CLS-Typ ist.

Um einen ungebundenen Delegaten definieren, sollte der erste Parameter in function_declaration der Typ des this Zeigers für das Objekt sein.Weitere Informationen finden Sie unter Nicht gebundene Delegate.

Delegaten sind Multicastdelegaten: Der "Funktionszeiger" kann an eine oder mehrere Methoden innerhalb einer verwalteten Klasse gebunden werden.Das delegate-Schlüsselwort definiert einen Multicastdelegattyp mit einer bestimmten Methodensignatur.

Ein Delegat kann auch an eine Methode einer Wertklasse, wie eine statische Methode gebunden werden.

Ein Delegat weist folgende Merkmale auf:

  • Es erbt von System::MulticastDelegate.

  • Er verfügt über einen Konstruktor, der zwei Argumente akzeptiert: Ein Zeiger auf eine verwaltete Klasse oder NULL (im Fall der Bindung an eine statische Methode) und eine vollständig qualifizierte Methode des angegebenen Typs.

  • Er verfügt über eine Methode mit dem Namen Invoke, deren Signatur der deklarierten Signatur des Delegaten entspricht.

Wenn ein Delegat aufgerufen wird, werden die Funktionen in der Reihenfolge aufgerufen, in der sie angefügt wurden.

Der Rückgabewert eines Delegaten ist der Rückgabewert der zuletzt angefügten Memberfunktion.

Delegaten dürfen nicht überladen werden.

Delegaten können gebunden oder ungebunden sein.

Wenn Sie einen gebundenen Delegaten instanziieren, ist das erste Argument ein Objektverweis. Das zweite Argument einer Delegatinstanziierung ist entweder die Adresse einer Methode eines verwalteten Klassenobjekts oder ein Zeiger auf eine Methode eines Werttyps. Das zweite Argument einer Delegatinstanziierung muss die Methode mit der vollständigen Syntax des Klassenbereichs benennen und den AddressOf-Operator anwenden.

Wenn Sie einen ungebundenen Delegaten instanziieren, ist das erste Argument entweder die Adresse einer Methode eines verwalteten Klassenobjekts oder ein Zeiger auf eine Methode eines Werttyps. Das Argument muss die Methode mit der vollständigen Syntax des Klassenbereichs benennen und den AdressOf-Operator anwenden.

Wenn Sie einen Delegaten zu einer statischen oder globalen Funktion erstellen, ist nur ein Parameter erforderlich: Die Funktion (optional die Adresse der Funktion).

Weitere Informationen zu Delegaten finden Sie unter

Compileroption: /clr

Beispiel

Im folgenden Beispiel wird gezeigt, wie Delegaten deklariert, initialisiert und aufgerufen werden.

// mcppv2_delegate.cpp
// compile with: /clr
using namespace System;

// declare a delegate
public delegate void MyDel(int i);

ref class A {
public:
   void func1(int i) {
      Console::WriteLine("in func1 {0}", i);
   }

   void func2(int i) {
      Console::WriteLine("in func2 {0}", i);
   }

   static void func3(int i) {
      Console::WriteLine("in static func3 {0}", i);
   }
};

int main () {
   A ^ a = gcnew A;

   // declare a delegate instance
   MyDel^ DelInst;

   // test if delegate is initialized
   if (DelInst)
      DelInst(7);

   // assigning to delegate
   DelInst = gcnew MyDel(a, &A::func1);

   // invoke delegate
   if (DelInst)
      DelInst(8);

   // add a function
   DelInst += gcnew MyDel(a, &A::func2);

   DelInst(9);

   // remove a function
   DelInst -= gcnew MyDel(a, &A::func1);

   // invoke delegate with Invoke
   DelInst->Invoke(10);

   // make delegate to static function
   MyDel ^ StaticDelInst = gcnew MyDel(&A::func3);
   StaticDelInst(11);
}

Output

in func1 8
in func1 9
in func2 9
in func2 10
in static func3 11
Anzeigen:
© 2016 Microsoft