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) コードがどのように読みやすくなり、別の型を作成せずに比較を行うのにどのように役立つかがわかります。

私の質問は、アプリケーションの複数の領域でこの比較を使用したい場合はどうすればよいですか? これでは、同じ「匿名メソッド」を何度も書かざるを得なくなると思いませんか? これは再利用性のOOPに反していると思いませんか?

4

4 に答える 4

3

同じ匿名メソッドを何度も使用している場合は、おそらくどこかで静的メソッドである必要があります。次に、デリゲートの代わりに参照を渡すだけです。おそらくクロージャ変数/パラメータへの参照が必要なため、匿名デリゲートは1回限りのものにする必要があります。

于 2010-10-09T22:48:42.613 に答える
0

コードを頻繁に再利用する場合は、独自のメソッドにリファクタリングします。

あなたが示唆するように、コードのチャンクを繰り返すことは再利用性に反します。そうさせられるパターンが思いつきません。

于 2010-10-09T22:51:59.627 に答える
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 に答える