__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