2012-08-07 43 views
0

任何人都可以說靜態/對象方法調用與委託方法之間的差異在這裏調用從我的結束提供的示例。靜態方法調用vs委託方法調用有什麼區別?

class Program 
{ 
    private delegate void TestDeleg1(string input1); 
    static void Main(string[] args) 
    { 
     // Using delege & Lambda expression 
     TestDeleg1 testDeleg1 = input => { var test = "Hai " + input; Console.WriteLine(test); }; 
     testDeleg1("Microsoft"); 

     // Using simple static method invoke 
     TestImplementation("Microsoft"); 
     Console.ReadLine(); 
    } 

    public static void TestImplementation(string input1) 
    { 
     var test = "Hai " + input1; 
     Console.WriteLine(test); 
    } 
} 

因爲我沒有發現任何實時使用委託方法調用。

感謝, S.Venkatesh

回答

3

在您的例子..有一個在他們的使用沒有區別。但是從結構上來說,它們完全不同。委託是對方法的參考。靜態方法是一種方法。

代表可以改變他們引用的方法..但是,一種方法就是..一種方法。

+1

如果你發現時間與實際使用分享的差異 – user1531248 2012-08-07 07:02:29

1

代表的用途也來自於它們是類型,可用作方法的參數。例如,如果你聲明

internal delegate bool PredicateOnInt32(int x); 

然後PredicateOnInt32是一種引用類型的,你可以把它作爲一個方法的參數,如

internal int GetFirstNumberWhere(PredicateOnInt32 pred) 
{ 
    foreach (int num in this.numbers) 
    { 
    if (pred(num)) 
     return num; 
    } 
    throw new InvalidOperationException("No number satisfies the specified prediacte"); 
} 

這只是個例,當然。但是想一想LINQ,並且你明白有一個類型代表一個特定簽名和返回類型的方法(或幾個方法)是很有用的。

代理的另一種用途是在事件其中在場景後面使用委託實例來保存事件「發生」時要調用的方法集合。例如,當點擊一個按鈕時。然後,不同的「訂閱者」可以通過事件的添加訪問者將他們自己的方法添加到委託中。

相關問題