2010-10-09 3 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), как код становится читаемым и как это помогло мне сделать сравнение с созданием из другого типа.

Мой вопрос: что делать, если мы хотим использовать это сравнение в нескольких областях в моем приложении? разве вы не думаете, что это заставит меня снова и снова писать один и тот же «Анонимный метод»? Разве вы не думаете, что это против ООП для повторного использования?

ответ

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