Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Когда наиболее правильно использовать вложенные функции? [дубликат]

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

Комментариев нет:

Отправить комментарий