__delegate
附註本主題僅適用於第 1 版的 Managed Extensions for C++。 這個語法只應該用於維護第 1 版的程式碼。 請參閱delegate如有關在新語法中使用的相等功能。
定義可以用來封裝特定的簽章的方法是參考型別。
__delegate function-declarator
備註
委派是大致上等於 C++ 函式指標以外的下列差異:
- 委派只能繫結至 __gc 類別內的一或多個方法。
當編譯器遇到__delegate關鍵字,__gc 類別的定義,就會產生。 這個 __gc 類別具有下列特性:
它是繼承自 System::MulticastDelegate。
它有兩個引數的建構函式: 指向 __gc 類別的指標或 NULL (的情況下繫結至靜態方法) 和指定之型別的完整限定的方法。
它有方法,呼叫Invoke,其簽名碼符合委派的宣告簽章。
範例
在下列範例中,__gc 類別 (MyCalendar) 和委派 (GetDayOfWeek) 宣告。 委派會繫結至不同的方法的MyCalendar,依序叫用每個:
// 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)));
}
範例輸出
static handler
6
static handler
handler
4