Делегаты / Анонимный метод в C # 2 - PullRequest
1 голос
/ 10 октября 2010

В 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 ]

3 голосов
/ 10 октября 2010

Если вы используете один и тот же анонимный метод снова и снова, вероятно, он должен быть где-то статическим.Тогда вы просто передаете ссылку на него вместо делегата.Анонимные делегаты должны быть разовыми, возможно, потому, что для ссылки на закрывающие переменные / параметры нужна ссылка.

0 голосов
/ 10 октября 2010

Что-то среднее должно делать это

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);
0 голосов
/ 10 октября 2010
Action reusableFunc = () => Console.WriteLine("Hello, world!");

где:

reusableFunc();

в другом месте:

reusableFunc();
0 голосов
/ 10 октября 2010

Если вы часто используете кусок кода, реорганизуйте его в свой собственный метод.

Как вы предлагаете, повторение фрагмента кода идет против повторного использования.Я не могу придумать шаблон, который заставил бы вас сделать это.

...