delegate (Komponentenerweiterungen für C++)

Deklariert einen Typ, der einen Funktionszeiger darstellt.

Alle Laufzeiten

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

3z2x4f55.collapse_all(de-de,VS.110).gifHinweise

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

Um zur Kompilierungszeit zu erkennen, ob ein Typ ein Delegat ist, verwenden Sie das __is_delegate()-Typmerkmal.Weitere Informationen finden Sie unter Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++).

Windows-Runtime

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

3z2x4f55.collapse_all(de-de,VS.110).gifSyntax

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

3z2x4f55.collapse_all(de-de,VS.110).gifParameter

  • 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.

  • Rückgabetyp
    Der Rückgabetyp des Funktionsprototypen.

  • Delegat-Typ-Bezeichner
    Der Name des deklarierten Delegatentyps.

  • Parameters
    (Optional) Die Typen und die Bezeichner des Funktionsprototyps.

3z2x4f55.collapse_all(de-de,VS.110).gifHinweise

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

3z2x4f55.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /ZW

Common Language Runtime

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

3z2x4f55.collapse_all(de-de,VS.110).gifSyntax

access delegate function_declaration

3z2x4f55.collapse_all(de-de,VS.110).gifParameter

  • 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.

  • Funktionsdeklaration
    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 zu definieren, muss der erste Parameter in Funktionsdeklaration der Typ des this-Zeigers für das Objekt sein.Weitere Informationen finden Sie unter Ungebundene Delegaten.

3z2x4f55.collapse_all(de-de,VS.110).gifHinweise

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

3z2x4f55.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /clr

3z2x4f55.collapse_all(de-de,VS.110).gifBeispiele

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

Ausgabe

  
  
  
  
  

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen