2014-04-01 28 views
0

我在c#中有委託代碼的示例代碼。我婉知道的是在下面的示例所示可以委託作爲類:代表可以用作類類型

using System; 

// This delegate returns int and takes an int argument. 
delegate int CountIt(int end); 

class VarCapture { 

    static CountIt Counter() { 
     int sum = 0; 
     // Here, a summation of the count is stored 
     // in the captured variable sum. 
     CountIt ctObj = delegate (int end) { 
      for(int i=0; i <= end; i++) { 
       Console.WriteLine(i); 
       sum += i; 
      } 
      return sum; 
     }; 
     return ctObj; 
    } 

    static void Main() { 
     // Get a counter. 
     CountIt count = Counter(); 
     int result; 
     result = count(3); 
     Console.WriteLine("Summation of 3 is " + result); 
     Console.WriteLine(); 
     result = count(5); 
     Console.WriteLine("Summation of 5 is " + result); 
    } 
} 
+0

*請在發佈之前花時間格式化您的代碼。這個問題目前是不可讀的。 –

回答

3

是,委託類型是類 - 每個具體的委託類型從MulticastDelegate繼承,你可以繞過代理引用剛就像你可以通過任何其他類型的參考。

通過CLR框架和語言可以有多種方式來處理它們,但這些方法都是在正常類的能力範圍之外的其他功能額外的

在這種特殊情況下,您使用的是anonymous method來創建委託的實例。您可能需要查看lambda expressions,它們通常會替代慣用C#中匿名方法的使用,但極少數情況除外。

+0

好,我們如何將Counter()函數傳遞給作爲委託簽名的CountIt委託類型的計數,並且函數不匹配? – user3409204

+0

@ user3409204:「Counter()」方法的簽名是不相關的,除了它返回一個CountIt引用。它創建委託方法,並返回一個引用。 –

+0

所以你的意思是這是dalegate方法的另一種方式,但我不是在任何書中的解釋? – user3409204

相關問題