.NET-структуры являются типами значений, это означает, что если функция A создает структуру и вызывает функцию B, которая пытается изменить структуру, B получит новую копию структуры, поэтому изменения не будут применяться к структуре A.
Структуры могут быть намного больше, чем другие типы значений CLR.Допустим, одна функция создает большую структуру, вызывает другую и передает структуру функции.Это продолжается для 10 уровней, но все функции просто должны читать данные из структуры и не изменять ни одно из полей.Если новая копия структуры действительно создается при каждом вызове функции, приведенный выше сценарий приведет к выделению множества ненужных структур.
Пользователи языка C могут избежать этого, передав указатель вместо самой структуры, и есливнутренние функции не должны изменять эти данные в структуре, можно использовать ключевое слово const.
Однако в C # вместо указателей есть ссылки, и такой вещи, как const ref, не существует.
Мой вопрос: оптимизирован ли .NET таким образом, что он знает, что нужно копировать структуру только тогда, когда функция пытается изменить поля внутри, или эта новая копия всегда создается, когда структура передается другой функции?