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

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

Неявные преобразования выражений констант обеспечивают следующие преобразования:

  • Преобразование константного_выражения (§7.19) типа int к типу sbyte, byte, short, ushort, uint или ulong, если значение константного_выражения является допустимым для конечного типа.

  • Преобразование константного_выражения типа long к типу ulong, если значение константного_выражения не является отрицательным.

6.1.10Неявные преобразования, включающие параметры типа

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

  • Из T к эффективному базовому классу C, из T к любому базовому для C классу, а также из T к любому интерфейсу, реализованному классом C. Если T является типом значений, во время выполнения преобразование выполняется как преобразование упаковки. Иначе, преобразование выполняется как неявное преобразование ссылочного типа или преобразование идентификации.

  • Из T к типу интерфейса I, принадлежащему эффективному набору интерфейсов T, а также из T к любому базовому интерфейсу I. Если T является типом значений, во время выполнения преобразование выполняется как преобразование упаковки. Иначе, преобразование выполняется как неявное преобразование ссылочного типа или преобразование идентификации.

  • Из T к параметру типа U, если T зависит от U (§10.1.5). Если в процессе выполнения U имеет тип значений, то T и U обязательно имеют один тип и преобразование не выполняется. Иначе, если T является типом значений, во время выполнения преобразование выполняется как преобразование упаковки. Иначе, преобразование выполняется как неявное преобразование ссылочного типа или преобразование идентификации.

  • Из литерала null к T, если T является ссылочным типом.

  • Из T к ссылочному_типу_T, при наличии неявного преобразования к ссылочному_типу_ S0 и наличии у S0 преобразования идентификатора к S. Во время выполнения преобразование происходит тем же способом, что и преобразование к S0.

  • Из T к типу T интерфейса, при наличии неявного преобразования к интерфейсу или делегату типа I0 и наличии у I0 вариантов преобразований (§13.1.3.2) к I. Если T является типом значений, во время выполнения преобразование выполняется как преобразование упаковки. Иначе преобразование выполняется как неявное преобразование ссылочного типа или преобразование идентификации.

Если T является ссылочным типом (§10.1.5), все описанные выше преобразования классифицируются как неявные преобразования ссылочных типов (§6.1.6). Если T не является ссылочным типом, описанные выше преобразования классифицируются как преобразования упаковки (§6.1.7).

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

Пользовательское неявное преобразование включает в себя необязательное стандартное неявное преобразование, за которым следует выполнение пользовательского оператора неявного преобразования, а затем другое необязательное стандартное неявное преобразование. Точные правила вычисления пользовательских неявных преобразований описываются в §6.4.4.

6.1.12Преобразования анонимных функций и преобразования группы методов

Анонимные функции и группы методов не имеют типа, однако могут быть неявно преобразованы к типу делегата или типу дерева выражений. Дополнительные сведения о преобразованиях анонимных функций и группы методов см. в §6.5 и §6.6 соответственно.

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