Re: Новый ref readonly в C# & IL
От: samius Япония http://sams-tricks.blogspot.com
Дата: 23.10.17 21:44
Оценка: +4
Здравствуйте, VladCore, Вы писали:

VC>Вот такое 20го числа майкрософт зарелизила:


VC>
VC>class Type1
VC>{
VC>    // This parameter will have an attribute (in IL) of type `IsReadOnly`
VC>    public void Method1(ref readonly int param1) { throw null; }

VC>    // This method return type will have an attribute (in IL) of type `IsReadOnly`
VC>    public ref readonly int Method2() { throw null; }
VC>}
VC>


VC>Зачем верхний (input) понятно, хотя может и не до конца.

Я это понимаю так, как
const int *

Т.е. невозможность(неудобность) для вызываемого кода изменить значение по указателю.

VC>А зачем нижний (return)? Туплю

Ровно за тем же, но наоборот. Это неудобство для вызываемого кода изменять то, что вернул вызываемый код. Ведь он мог вернуть ссылку на свои частные требухи, которые менять нежелательно.

VC>Если можно пример парами — как раньше делалось и как теперь это готовить

с int-ом не сильно интересно. Вот ValueTuple<double, double, double> — уже может продемонстрировать накладные расходы на избыточное копирование по стеку. Вместо этого ссылка, гарантирующая неизменность, позволяет нам читать напрямую из полей класса без копирований.

VC>И зачем оно в IL нужно, можно же было только си-шарпом обойтись

C# может обеспечить неизменность в рамках C#, а что если кто-то IL запрограммирует мимо C#? Тогда никаких гарантий не выйдет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.