绑定和非绑定代表有什么区别?CLI/C++中绑定和非绑定代理之间的区别
继承人如何创建两种类型的代表:
// 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;
};
你可以显示'HandlerClass'的代码吗? 'Fun1'是静态的吗? –
yup Fun1是静态的 –
然后它很清楚,是不是 - 一个版本是免费函数,一个是(非静态)成员函数。 –