#c_sharp #net
На этот вопрос уже даны ответы здесь: Объясните смысл новшеств C# 7 (2 ответа) Для чего действительно нужны локальные функции? (2 ответа) Закрыт 2 года назад. В c# 7.0 появились вложенные функции. Собственно вопрос, а когда использование данного синтаксиса оправданно? Я понимаю, что это синтаксический сахар, но ИМХО и без них раньше жилось хорошо. Подчеркнуть, что данная функция вызывается в одном месте? Ну не знаю...
Ответы
Ответ 1
Подчеркнуть, что данная функция вызывается в одном месте? Не обязательно. Она может выполняться и много раз в методе, в котором она вложена. Просто сейчас такие "локально выполняемые" функции можно не выносить в класс. Как следствие - класс будет чище и читабельней. К слову, вложенная функция имеет доступ к локальным переменным метода: var number = 23; void DoAction() { Console.WriteLine(number); // 23 } DoAction(); Так же нашел пользу использования вложенных функций в подписках на события. Давайте приведу пример, как это выглядело раньше: EventHandler createdEventHandler = null; createdEventHandler += (sender, e) => { something.Created -= createdEventHandler; ... }; something.Created += createdEventHandler; А теперь с помощью вложенных функций: void OnCreated(object sender, EventArgs e) { something.Created -= OnCreated; ... } something.Created += OnCreated; Что выглядит читабельней? Нашел еще красивый пример, размещенный VladD'ом: void SortBy(List list, Func expr, bool ascending) { int comparerAscending(T t1, T t2) { return expr(t1).Compare(expr(t2)); } int comparerDescending(T t1, T t2) { return expr(t2).Compare(expr(t1)); } list.Sort(ascending ? comparerAscending : comparerDescending); }
Комментариев нет:
Отправить комментарий