Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

5.4Ссылочные переменные

Ссылка_на_переменную представляет собой выражение, которое классифицируется как переменная. Ссылка_на_переменную указывает место хранение, к которому можно получить доступ как для извлечения текущего значения, так и для сохранения нового значения.

ссылка_на_переменную: выражение

В C и C++ ссылка_на_переменную называется lvalue.

5.5Атомарность ссылок на переменные

К атомарным действиям относятся чтение и запись следующих типов данных: bool, char, byte, sbyte, short, ushort, uint, int, float и ссылочных типов. В дополнение к этому атомарными действиями являются чтение и запись типов перечислений с базовым типом в приведенном выше списке. Чтение и запись других типов, включая long, ulong, double и decimal, а также пользовательских типов, не обязательно являются атомарными действиями. Если речь не идет о предназначенных для этой цели библиотечных функциях, гарантия атомарного чтения, изменения и записи, например в случае приращения или уменьшения, отсутствует.

6.Преобразования

С помощью преобразований выражения могут обрабатываться как выражения определенного типа. Преобразования позволяют обрабатывать выражения заданного типа как имеющие другой тип, а выражения без типа – как выражения определенного типа. Преобразования бывают явными и неявными, что определяет необходимость использования явного приведения. Например, преобразование из типа int к типу long является неявным, поэтому выражения типа int могут неявно обрабатываться как имеющие тип long. Обратное преобразование из типа long к типу int является явным и требует явного приведения.

int a = 123; long b = a; // implicit conversion from int to long int c = (int) b; // explicit conversion from long to int

Некоторые преобразования определяются языком. В программе также можно определить собственные преобразования (§6.4).

6.1Неявные преобразования

К неявным преобразованиям относятся следующие:

  • Преобразования идентификатора.

  • Неявные преобразования числовых типов.

  • Неявные преобразования перечисляемых типов.

  • Неявные преобразования обнуляемых типов.

  • Преобразования литерала null.

  • Неявные преобразования ссылочных типов

  • Преобразования упаковки.

  • Неявные преобразования динамических типов

  • Неявные преобразования выражений констант

  • Пользовательские неявные преобразования

  • Преобразования анонимных функций.

  • Преобразования группы методов.

Неявные преобразования могут происходить во многих случаях, в том числе при вызове члена функции (§7.5.4), выражения приведения (§7.7.6) или присваивания (§7.17).

Предопределенные неявные выражения всегда выполняются успешно и никогда не порождают исключений. Корректно разработанные пользовательские преобразования также должны отвечать этим требованиям.

Для преобразований типы object и dynamic являются идентичными.

Однако динамические преобразования (§ и §Error: Reference source not found) применяются только к выражениям типа dynamic (§4.7).

6.1.1Преобразование идентификатора

Преобразование идентификатора обеспечивает приведение типа к такому же типу. Это преобразование используется только для того, чтобы задать возможность преобразования к конкретному типу сущности, уже имеющей этот тип.

Поскольку типы object и dynamic считаются идентичными, существует неявное преобразование идентификации между типами object и dynamic, а также между сформированными типами, которые являются теми же, когда все типы dynamic заменяются на тип object.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]