绑定和非绑定代理之间的区别是什么?
以下是如何创建两种类型的委托:
// bound delegate declaration
public delegate void Handler(int value);
// create a bound delegate
Handler^ handler = gcnew Handler(HandlerClass::Fun1);
// unbound delegate declaration
public delegate void UBHandler(ThisClass^, int value);
// create an unbound delegate
UBHandler^ ubh = gcnew UBHandler(&ThisClass::Sum);
这几乎是一样的。然后,您可以为包含两个参数的绑定委托创建构造函数:
HandlerClass^ obj = gcnew HandlerClass;
Handler^ handler2 = gcnew Handler (obj, & HandlerClass::Fun3);
这意味着您可以使用此特定委托来调用非静态函数(是一个实例)。但是你可以对未绑定的代表做同样的事情。您可以通过以下方式致电ubh代表:
ThisClass^ obj = gcnew ThisClass(99.0);
ubh(obj, 5);
那么两种类型的重点是什么?
// code for HandlerClass
public ref class HandlerClass
{
public:
static void Fun1(int m)
{ Console::WriteLine(L”Function1 called with value {0}”, m); }
static void Fun2(int m)
{ Console::WriteLine(L”Function2 called with value {0}”, m); }
void Fun3(int m)
{ Console::WriteLine(L”Function3 called with value {0}”, m+value); }
void Fun4(int m)
{ Console::WriteLine(L”Function4 called with value {0}”, m+value); }
HandlerClass():value(1){}
HandlerClass(int m):value(m){}
protected:
int value;
};
答案 0 :(得分:2)
不同之处在于生成目标对象值的确切时间。使用绑定委托时,它会在您创建委托对象时生成,并且在此之后永远不变。未绑定的委托不存储对象引用,它是在调用委托时生成的。然后可以使用相同的委托来调用具有不同对象的目标方法。
未绑定的委托与C ++成员函数指针的语法匹配。在C ++中,绑定的委托没有直接的等价物。