__delegate

Hinweis, das dieses Thema nur auf Version 1 von Managed Extensions for C++ gilt. Diese Syntax sollte nur verwendet werden, um Code zu erhalten, Version 1. Weitere Informationen finden Sie unter Delegat zu Informationen über die Verwendung der entsprechenden Funktionen in der neuen Syntax.

Definiert einen Referenztyp, der verwendet werden kann, um eine Methode mit einer bestimmten Signatur zu kapseln.

__delegate function-declarator

Hinweise

Ein Delegat ist für Funktionszeiger Ein C++-Compiler mit Ausnahme der folgenden entspricht ungefähr Unterschied:

  • Ein Delegat kann auf eine oder mehrere Methoden in einer Klasse nur __gc gebunden werden.

Wenn der Compiler das __delegate-Schlüsselwort findet, wird eine Definition einer __gc Klasse generiert. Diese __gc Klasse verfügt über die folgenden Eigenschaften:

  • Es erbt von System::MulticastDelegate.

  • Sie verfügt über einen Konstruktor, der zwei Argumente akzeptiert: Ein Zeiger auf eine __gc Klasse oder NULL (im Fall der Bindung einer statischen Methode) sowie eine voll gekennzeichnete Methode des angegebenen Typs.

  • Er verfügt über eine Methode mit Invokeaufgerufen wird, dessen Signatur der deklarierte Signatur des Delegaten übereinstimmt.

Beispiel

Im folgenden Beispiel werden eine __gc Klasse (MyCalendar) sowie einem Delegaten (GetDayOfWeek) deklariert. Der Delegat wird dann in den verschiedenen Möglichkeiten von MyCalendargebunden und ruft wiederum jeweils auf:

// keyword__delegate.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__delegate int GetDayOfWeek();
__gc class MyCalendar {
public:
   MyCalendar() : m_nDayOfWeek(4) {}
   int MyGetDayOfWeek() { 
      Console::WriteLine("handler"); return m_nDayOfWeek; 
   }
   static int MyStaticGetDayOfWeek() { 
      Console::WriteLine("static handler"); 
      return 6;
   }
private:
   int m_nDayOfWeek;
};

int main () {
   GetDayOfWeek * pGetDayOfWeek;  // declare delegate type
   int nDayOfWeek;
   
   // bind delegate to static method
   pGetDayOfWeek = new GetDayOfWeek(0, &MyCalendar::MyStaticGetDayOfWeek);
   nDayOfWeek = pGetDayOfWeek->Invoke();
   Console::WriteLine(nDayOfWeek);

   // bind delegate to instance method
   MyCalendar * pcal = new MyCalendar();
   pGetDayOfWeek = static_cast<GetDayOfWeek*>(Delegate::Combine(pGetDayOfWeek,
      new GetDayOfWeek(pcal, &MyCalendar::MyGetDayOfWeek)));
   nDayOfWeek = pGetDayOfWeek->Invoke();
   Console::WriteLine(nDayOfWeek);

   // delegate now bound to two methods; remove instance method
   pGetDayOfWeek = static_cast<GetDayOfWeek*>(Delegate::Remove(pGetDayOfWeek,
      new GetDayOfWeek(pcal, &MyCalendar::MyGetDayOfWeek)));
}

Beispielausgabe

static handler
6
static handler
handler
4