1

在 C# 1 中。您没有委托排序或比较选项。您可能会被迫通过创建另一种实现 IComparer 的类型来对 ArrayList 中的集合进行排序。但从 c# 2 开始。您可以使用委托进行比较。看下面的例子。

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

我可以看到
1)委托(匿名方法)如何让生活变得轻松
2)代码如何变得可读以及它如何帮助我在不创建另一种类型的情况下进行比较。

我的问题是 - 如果我们想在我的应用程序的多个区域中使用这种比较怎么办?你不觉得这会迫使我一次又一次地写同样的“匿名方法”吗?你不认为这违背了面向对象的可重用性吗?

4

4 回答 4

3

如果您一遍又一遍地使用相同的匿名方法,它可能应该是某个地方的静态方法。然后你只需传递对它的引用而不是委托。匿名委托应该是一次性的,也许是因为它需要对闭包变量/参数的引用。

于 2010-10-09T22:48:42.613 回答
0
Action reusableFunc = () => Console.WriteLine("Hello, world!");

某处:

reusableFunc();

别处:

reusableFunc();
于 2010-10-09T22:55:03.603 回答
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);
于 2010-10-09T22:58:49.640 回答
0

如果您经常重用一段代码,请将其重构为自己的方法。

正如您所建议的,重复一大段代码确实不利于可重用性。我想不出能让你这样做的模式。

于 2010-10-09T22:51:59.627 回答