Когда вычисляются аргументы отложенной функции defer? В момент определения или в момент вызова функции?

В C# нет ключевого слова defer — это конструкция из языка Go.

Короткий ответ

Что ответить на собеседовании

В C# нет ключевого слова defer — это конструкция из языка Go. Если вопрос про Go, то аргументы отложенной функции defer вычисляются в момент определения (то есть в момент исполнения строки с defer), а сама функция вызывается позже, при выходе из текущей функции.

Подробный разбор

Ответ с пояснениями

В C# нет ключевого слова defer — это конструкция из языка Go. Если вопрос про Go, то аргументы отложенной функции defer вычисляются в момент определения (то есть в момент исполнения строки с defer), а сама функция вызывается позже, при выходе из текущей функции.

Пример на Go:

func example() {
    x := 5
    defer fmt.Println(x) // x вычисляется сейчас, значение 5 сохраняется
    x = 10
}
// При выходе из example() будет выведено 5, а не 10

Если же вопрос про C#, то там аналогом defer может быть using или конструкции с try/finally, где аргументы вычисляются в момент вызова, а освобождение ресурсов — позже.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее