Может ли кто-нибудь дать мне пример того, как использовать Анонимные методы?Пример и отмена использования Анонимных методов
Убирают ли они спины, как ухудшение качества их использования?
Может ли кто-нибудь дать мне пример того, как использовать Анонимные методы?Пример и отмена использования Анонимных методов
Убирают ли они спины, как ухудшение качества их использования?
Я считаю, это очень полезно использовать анонимные методы, чтобы избежать глобальных переменных
Без анонимных методов:
private static Dictionary<Binding, ErrorProvider> dict =
new Dictionary<Binding, ErrorProvider>();
public static void ParseBinding(Binding binding)
{
var errorProvider = new ErrorProvider();
dict.Add(binding, errorProvider);
binding.Parse += new ConvertEventHandler(binding_Parse);
}
static void binding_Parse(object sender, ConvertEventArgs e)
{
var binding = sender as Binding;
var errorProvider = dict[binding];
try
{
// some validation form e.Value
// throws exception if not valid
}
catch (Exception ex)
{
errorProvider.SetError(binding.Control, ex.Message);
}
}
Это действительно опасно, так как мне нужно заботиться о себе, чтобы удалить записи из словарь, если он больше не используется, в противном случае у меня есть утечка памяти, так как сборщик мусора никогда не удалит привязку или поставщик ошибок.
Теперь гораздо проще реализация анонимных методов:
public static void ParseBinding(Binding binding)
{
var errorProvider = new ErrorProvider();
binding.Parse += (sender, e) =>
{
try
{
// some validation form e.Value
// throws exception if not valid
}
catch (Exception ex)
{
errorProvider.SetError(binding.Control, ex.Message);
}
};
}
Читайте MSDN: Anonymous Methods (C# Programming Guide):
Создание анонимных методов является по существу способ передать блок кода в качестве параметра делегата.
Используя анонимные методы, вы сокращаете накладные расходы на кодирование в , создавая экземпляры делегатов, устраняя необходимость создания отдельного метода .
Например, указание блока кода вместо делегата может быть полезными в ситуации, когда приходится создать метод может показаться ненужных накладных
Это ошибка, чтобы иметь инструкцию перехода, такую как goto, break, или продолжить, внутри блока анонимного метода, цель которого находится вне блока. Также ошибка заключается в том, что оператор перехода, такой как goto, , разбивается или продолжается, за пределами анонимного блока методов, целью которого является внутри блока.
Анонимный метод не может получить доступ к параметрам ref или out внешней области .
Доступ к небезопасному коду можно получить в рамках блока анонимного метода.
Кроме чтения Create Elegant Code with Anonymous Methods, Iterators, and Partial Classes
Анонимный метод определен в линию, а не в качестве способа члена любого класса. Кроме того, нет способа применить атрибуты метода к анонимному методу, а также анонимный метод не может определить общие типы или добавить общие ограничения.
Может быть полезно ...
http://www.dotnet-tricks.com/Tutorial/csharp/40ID180612-C-Sharp-Anonymous-Method.html
Есть несколько недостатков, которые при использовании анонимных методов. Во-первых, вы не можете использовать функцию «Редактировать и продолжить» в отладчике Visual Studio. Не допускается внесение изменений в метод или анонимный метод при выполнении кода - вместо этого вам необходимо внести изменения в свой код и перезапустить отладчик.
Другая потенциальная проблема заключается в том, что, предполагая, что код в анонимном методе должен выполняться в ответ на несколько событий, некоторые разработчики могут сами копировать и вставлять код в несколько мест своего приложения, игнорируя при этом общее правило повторного использования кода.
См [что-это-анонимная-метода-в-с] (http://stackoverflow.com/questions/6008097/what-are- anonymous-methods-in-c) Имеет примеры. – nawfal