__delegate
本主题仅适用于托管扩展的 1 版 C++ 的说明。 只应在此语法维护 1 版代码。 有关使用等效功能的信息在新语法,请参见 委托 。
定义可用于封装与特定签名的方法的引用类型。
__delegate function-declarator
备注
委托大致相当于 c. C++ 函数指针除了具有以下差异:
- 委托只能绑定到 __gc 类中的一个或多个方法。
当编译器遇到 __delegate 关键字时, __gc 类的定义生成。 此 __gc 类具有以下特征:
它从 系统:: 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