Size: a a a

2019 January 20

К

Карен in .NET CIL Chat
Но я задумался, почему in нельзя для значимых типов игнорировать.
Ведь если убрать in тогда ничего не поменяется, значение структуры будет меняться только внутри вызываемого метода.
источник

К

Карен in .NET CIL Chat
Без оператора in значение копируется, и с оператором in значение копируется )
источник

vl

vova lantsov in .NET CIL Chat
in, видимо, рассчитан на ридонли структуры
источник

vl

vova lantsov in .NET CIL Chat
А я вот ещё не понял почему структура копируется в 2х методах
источник

vl

vova lantsov in .NET CIL Chat
Допустим в мейне это для защиты, а в S1Foo методе зачем?
источник

К

Карен in .NET CIL Chat
так про это и сказали уже выше
источник

К

Карен in .NET CIL Chat
ты передал объект структуры по ссылке
источник

К

Карен in .NET CIL Chat
а т.к. параметр in должен предотвратить любые попытки изменения этой структуры в вызываемом методе, там в методе копируется объект и с этим объектом уже код работает, делая что хочет
источник

vl

vova lantsov in .NET CIL Chat
По-моему, можно было бы вполне обойтись без одного из копирований, оно бы в методе S1Foo даже с 1 копированием уже работало бы совсем в другим участком памяти, отличающимся от оригинальной структуры, нет?
источник

К

Карен in .NET CIL Chat
оно и так 1 раз копируется в S1Foo
источник

К

Карен in .NET CIL Chat
ты ведь туда передаешь не значение а ссылку на структуру
источник

vl

vova lantsov in .NET CIL Chat
И ещё 1 раз в мейне)
источник

К

Карен in .NET CIL Chat
в мейне копируется отдельно для инициализации полей
источник

К

Карен in .NET CIL Chat
это вообще разные вещи )
источник

К

Карен in .NET CIL Chat
компилятор такое не объединяет
источник

vl

vova lantsov in .NET CIL Chat
Ссылку на копию оригинальной структуры, получается
источник

К

Карен in .NET CIL Chat
нет, ссылку на оригинальную структуру
источник

К

Карен in .NET CIL Chat
а инициализация полей происходит в копии структуры
источник

К

Карен in .NET CIL Chat
Main в другой структуре S1 проводит инициализацию полей, а потом копирует всю структуру целиком в оригинальную переменную
источник

К

Карен in .NET CIL Chat
и на этом всё, это никак не связано с вызываемыми  методами
источник