2010-10-09 107 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);