簡體   English   中英

C#2中的代理人/匿名方法

[英]Delegates/Anonymous Method in C# 2

在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?

如果您一遍又一遍地使用相同的匿名方法,那么它在某處可能應該是靜態方法。 然后,您只需傳遞對該引用的引用即可,而不是委托。 匿名委托應該是一次性的,也許是因為它需要引用閉包變量/參數。

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

正如您所建議的那樣,重復執行一段代碼確實會損害可重用性。 我想不出一種可以使您做到這一點的模式。

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

某處:

reusableFunc();

別處:

reusableFunc();

兩者之間應該做些什么

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM