#c# #.net #clr #c#-7.0 #local-functions
Вопрос:
https://www.infoworld.com/article/3182416/c-7-in-depth-exploring-local-functions.html
Мне действительно нужно точно знать, следуя коду, какими должны быть локальные функции.
У меня 0% опыта работы с кодом IL/MSIL.
public static void Display(string str)
{
int ctr = 5;
DisplayText();
void DisplayText ()
{
for(int i = 0; i < ctr; i )
Console.WriteLine(str);
}
}
Вопрос, который мне нужно знать здесь из предыдущего кода:
- Если мы вызываем основную функцию
Display()
, всегда ли локальная функцияDisplayText()
генерируется при вызове основной? Или он создан как поддельная локальная функция в C#, но в MSIL он сгенерирован как глобальная функция? - В методе выражения lamda? делает ли это то же самое выше?
- Безопасно ли зависеть от локальных функций? или мы все равно не будем его использовать. (производительность, возможно, idk)
Редактировать:- Я думаю, что локальные свойства (которых еще не существует или, может быть …). иногда это также полезно. который вы можете рассчитать тем же методом, что и локальное свойство. как и в предыдущем примере, но DisplayText являются собственностью. Хотелось бы, чтобы они тоже добавили это.
Ответ №1:
CIL и среда выполнения не имеют понятия о локальной функции, вместо этого компилятор C# преобразует ее в обычный метод с частной видимостью и потенциально классом/структурой, используемым для совместного использования состояния с методом объявления. Вы можете убедиться в этом сами, скомпилировав код, а затем декомпилировав сборку, или используя такой сайт, как SharpLab.io.
Лямбда-выражения и анонимные методы очень похожи, за исключением того, что им необходимо предоставить делегат, который может ограничить возможности оптимизации.
Компилятор прилагает много усилий для оптимизации сгенерированного кода, я бы не ожидал, что локальные методы повлияют на производительность намного больше, чем вы получили бы для любого другого метода. Я бы посоветовал вам больше сосредоточиться на том, как это влияет на ремонтопригодность, по крайней мере, до тех пор, пока вы не сможете определить реальную проблему производительности с помощью профилирования.
Комментарии:
1. Я также подумал, почему бы им также не предоставить местную недвижимость? полезно иметь локальные свойства, которые вычисляются или могут возвращать определенные вычисления…
2. Я не думаю, что локальное свойство принесет большую пользу, помимо того, что может быть достигнуто с помощью локального метода, и, конечно, этого недостаточно, чтобы оправдать затраты на его реализацию по сравнению с другими языковыми функциями.