綁定和非綁定代表有什麼區別?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是靜態的 –
然後它很清楚,是不是 - 一個版本是免費函數,一個是(非靜態)成員函數。 –