2009-04-19 44 views
0

委託是一個函數指針。所以它指向一個符合標準(參數和返回類型)的函數。如果有多個方法滿足委託標準,委託人將指出兩個什麼函數?

這引發了一個問題(對我來說),如果有多於一種方法具有完全相同的返回類型和參數類型,那麼委託會指向什麼函數?班上第一個出現的功能是什麼?

謝謝

+0

它*提出了*問題。乞討的問題是提出一個以其結論爲前提的論點。 – 2009-04-20 02:49:22

回答

3

確切的方法是在創建委託時指定的。

public delegate void MyDelegate(); 

private void Delegate_Handler() { } 

void Init() { 
    MyDelegate x = new MyDelegate(this.Delegate_Handler); 
} 
+0

謝謝。我的天真告訴我,我做的事情有點不對...... – dotnetdev 2009-04-19 22:12:52

+0

如果有重載,繼承等等,它會比這更復雜。 – 2009-04-19 22:13:11

3

正如Henk所說,創建委託時指定了該方法。現在,有多種方法可以滿足要求,原因有兩個:

  • 代表是變體,例如,您可以使用參數爲Object的方法創建Action<string>
  • 您可以通過使方法通用來重載方法,例如,

    static void Foo() {} 
    static void Foo<T>(){} 
    static void Foo<T1, T2>(){} 
    

的規則變得非常複雜,但他們在C#3.0規範的6.6節中規定。請注意,繼承也會使事情變得棘手。

1

因此它指向一個滿足條件(參數和返回類型)的函數。

沒有。

對一些添加背景亨克的答案:
就像int x是它可以包含整數的變量,委託是它可以包含函數的變量。

它指向你告訴它指向的任何函數。
EG:

// declare the type of the function that we want to point to 
public delegate void CallbackHandler(string); // 

... 

// declare the actual function 
public void ActualCallbackFunction(string s){ ... } 

... 
// create the 'pointer' and assign it 
CallbackHandler functionPointer = ActualCallbackFunction; 
// the functionPointer variable is now pointing to ActualCallbackFunction