Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Немного о valuetype


Автор: MaxWave 18.7.2011, 23:48
Прочитал тут статейку

http://habrahabr.ru/blogs/net/124404/

Ну собственно ясно, индексатор это св-во, св-во, это ф-я, которая возвращает копию valuetype.

int это value type? или я чтото не пойму...

Если руководствоваться статьей, то этот код вообще не долен комплироваться:

Код

 class Program
    {
        static void Main(string[] args)
        {
            List<int> ints = new List<int>(new []{3,5,7});
            ints[0]++;
            Console.WriteLine(ints[0]);
        }
    }


Однако все работает прекрасно и на экране мы видим цифру ЧЕТЫРЕ!!

Почему значение в массиве изменилось?

Автор: jonie 19.7.2011, 00:04
таки там написано:
Цитата

Но хотя язык C# и не поддерживает возвращение управляемых ссылок в общем случае, существует особая оптимизация в виде специальной инструкции IL-кода, которая позволяет получить не просто копию элемента массива, а ссылку на него (для любознательных, эта инструкция называется ldelema). Благодаря этой возможности, предыдущий фрагмент не только полностью корректен (включая строку am[0].Y++;), но и позволяет изменить непосредственно элементы массива, а не их копии. И если вы запустите предыдущий фрагмент кода, то увидите, что он компилируется, запускается, и напрямую изменяет нулевой объект массива.

Автор: MaxWave 19.7.2011, 06:13
А, пропустил, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)