Разоблачение другого мифа о значимых типах

Вот еще один миф о значимых типах, который я иногда слышу: "Очевидно, использование оператора new со ссылочным типом приводит к выделению памяти в куче. Но значимый тип потому и называется значимым, что хранит значение, а не ссылку на него. Таким образом, с помощью оператора new, примененного к значимому типу не выделяется дополнительной памяти. Точнее, используется…

2

Цепочки вызовов простых операторов присваивания не такие уж и простые

Дополнение: Я прерываю этот эпизод «Невероятных приключений» в коде просьбой моего друга и коллеги Лукиана (Lucian), из команды VB, который интересуется, является ли распространенным использование в C# того факта, что присваивание является выражением (expression). Темой сообщения является наиболее распространенное использование данного шаблона: тот факт, что «цепочки вызовов» операторов присваивания вообще работают, является следствием того, что…


Фитнесс без Фокусов

Вот утверждение, которое я прочитал вчера про сравнения объектов ссылочного типа в C#: Object.ReferenceEquals(x,y) возвращает true если, и только если, x и y ссылаются на один и тот же объект. Правда или нет? Моя жена Лея недавно купила Хонду Фит, спасибо имманентному отказу в соленоидах автоматической коробки передач её старой Хонды Цивик. Задние сиденья Фита…


Отсутствие доказательств – не доказательство отсутствия

Отсутствие доказательств – не доказательство отсутствия Сегодня – ещё два слегка неверных мифа о C#. Как вы, вероятно, знаете, C# требует, чтобы всем локальным переменным были явно присвоены значения перед тем, как из них читают, но предполагает, что всем полям экземпляра класса изначально присвоены их значения по умолчанию. Порой я слышу такое объяснение причин этого:…


Приоритет-против-порядка возвращаются

Еще раз я обращаюсь к мифу о том, что порядок вычисления в С# имеет какое-то отношение к приоритетам операторов. Вот вариант этого мифа, который я постоянно слышу. Предположим, у вас есть поле arr, являющееся массивом целых, и пара локальных переменных index и value: int index = 0;int value = this.arr[index++]; В итоге исполнения, value будет…


Не всё наследуется от object

Я слышу много мифов о C#. Обычно в мифах есть крупица истины, например «типы-значения всегда размещаются на стеке». Если вы замените «всегда» на «иногда», то некорректное мифическое утверждение станет корректным. Миф, который я слышу особенно часто – «в C# все типы наследуются от object». Неправда! Во-первых, никакие типы-указатели ни унаследованы от object, ни совместимы с…