C#: Почему у нас не может быть внутренних методов / локальные функции?

@Kyle

старые объясняют его себе через примечания в файле, пробуждает а? К моему ужасу я видел этот комментарий наверху части моего старого кода на днях:

/*
    bloody hell - where to start...
*/
7
задан Marc 7 October 2016 в 09:38
поделиться

6 ответов

Что ж, мы можем иметь "анонимные методы", определенные внутри функции (я не предлагаю использовать их для организации большого метода):

void test() {
   Action t = () => Console.WriteLine("hello world");  // C# 3.0+
   // Action t = delegate { Console.WriteLine("hello world"); }; // C# 2.0+
   t();
}
14
ответ дан 6 December 2019 в 06:50
поделиться

Если что-то длинное и сложное, чем обычно рекомендуется реорганизовать в отдельный класс (обычный или статический - в зависимости от контекста), вы можете иметь частные методы, которые будут специфичными только для этой функции.

7
ответ дан 6 December 2019 в 06:50
поделиться

Я знаю, что многим людям не нравятся регионы, но в данном случае они могут оказаться полезными, если сгруппировать ваши конкретные методы в регион.

2
ответ дан 6 December 2019 в 06:50
поделиться

Лучшее решение - провести рефакторинг этого метода для разделения класса. Создайте экземпляр этого класса как частное поле в исходном классе. Сделать большой метод общедоступным и преобразовать большой метод в несколько частных методов,

0
ответ дан 6 December 2019 в 06:50
поделиться

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

1
ответ дан 6 December 2019 в 06:50
поделиться

Не могли бы вы привести более конкретный пример? После прочтения вашего сообщения у меня сложилось следующее впечатление, которое, конечно, является лишь предположением из-за ограниченной информации:

  • Частные методы недоступны за пределами вашего класса, поэтому они все равно скрыты от любого другого кода.
  • Если вы хотите скрыть частные методы от другого кода в том же классе, ваш класс может быть слишком большим и может нарушать правило единой ответственности.
  • Посмотрите на анонимные делегаты лямбда-выражений. Это не совсем то, о чем вы просили, но они могут решить большинство ваших проблем.

Ахим

2
ответ дан 6 December 2019 в 06:50
поделиться