2010-10-09 111 views
1

在C#中1.您沒有委託排序或比較選項。您可能會被迫通過創建另一個類型來實現IComparer來對ArrayList中的集合進行排序。 但從C#2開始。您可以使用代表進行比較。看下面的例子。C#2中的代表/匿名方法

List<Product> products = Product.GetSampleProducts(); 
products.sort(delegate(Product p1, Product p2) {return p1.Name.CompareTo(p2.Name);}); 

我可以看到
1)委託(匿名方法)如何讓生活變得簡單
2)代碼是如何變成可讀的,以及它如何幫助我做的比較有創造出另一種類型。

我的問題是 - 如果我們想在我的應用程序的多個區域使用這種比較呢?你不覺得這會迫使我一次又一次地寫同樣的「匿名方法」嗎? 你不覺得這是針對可重用性的OOP嗎?

回答

3

如果你反覆使用同一個匿名方法,它可能應該是一個靜態方法。然後,您只需傳遞對該代表的引用即可。匿名代表應該是一次性的,也許是因爲它需要引用閉包變量/參數。

0

如果您經常重複使用一段代碼,請將其重構爲自己的方法。

正如你所建議的,重複一段代碼確實會違反可重用性。我想不出一個會讓你這樣做的模式。

0
Action reusableFunc =() => Console.WriteLine("Hello, world!"); 

地方:

reusableFunc(); 

其他地方:在兩者之間應該做

reusableFunc(); 
0

東西它

delegate void MyDelegate(Product p1, Product p2); 

MyDelegate myDelegate = delegate(Product p1, Product p2e) { 
    return p1.Name.CompareTo(p2.Name); 
}; 

products.sort(myDelegate); 
products2.sort(myDelegate);