Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2017-10-16 | 217 |
5.00
из
|
Заказать работу |
|
|
Явный вывод типа параметра выполняется из выражения E к типу T следующим образом:
· Если E является анонимной функцией с явным указанием типа с типами параметров U1…Uk, а T является типом делегата или типом дерева выражения с типами параметров V1…Vk, то для каждого Ui выполняется точный вывод (§7.5.2.8) из Ui к соответствующему Vi.
Точный вывод
Точный вывод из типа U к типу V выполняется следующим образом.
· Если V является одним из нефиксированных Xi, то U добавляется к набору границ для Xi.
· Иначе, наборы V1…Vk и U1…Uk определяются проверкой применимости одного из следующих случаев:
· V является типом массива V1[…] и U является типом массива U1[…] того же ранга.
· V является типом V1? и U является типом U1?.
· V является сформированным типом C<V1…Vk> and U — сформированным типом C<U1…Uk>.
Если применим хотя бы один из этих случаев, выполняется точный вывод из каждого Ui в соответствующий Vi.
· Иначе вывод не производится.
Вывод нижних границ
Вывод нижних границ из типа U в тип V выполняется следующим образом.
· Если V является одним из нефиксированных Xi, то U добавляется к набору нижних границ для Xi.
· Иначе, если V является типом V1? и U является типом U1?, то выполняется вывод по нижней границе из U1 к V1.
· Иначе, наборы U1…Uk и V1…Vk определяются проверкой применимости одного из следующих случаев:
· V является типом массива V1[…], а U — типом массива U1[…] (или типом параметра, эффективный базовый тип которого — U1[…]) того же ранга
· V — один из IEnumerable<V1>, ICollection<V1> или IList<V1>, а U — тип одномерного массива U1[] (или параметр типа, эффективный базовый тип которого — U1[]).
· V — сформированный класс, структура, интерфейс или тип делегата C<V1…Vk>; также существует уникальный тип C<U1…Uk>, в котором U (или, если U является параметром типа, его эффективный базовый класс или любой член его набора эффективных интерфейсов) идентичен, наследует от (напрямую или косвенно) или реализует (напрямую или косвенно) C<U1…Uk>..
|
(Ограничение "уникальности" означает, что в случае interface C<T>{} class U: C<X>, C<Y>{} во время вывода из U в C<T> вывод произведен не будет, так как U1 может быть X или Y.)
Если применим хотя бы один из этих случаев, выполняется точный вывод из каждого Ui в соответствующий Vi следующим образом:
· Если неизвестно, что Ui является ссылочным типом, выполняется точный вывод.
· Иначе, если U — тип массива, выполняется вывод по нижней границе.
· Иначе, если V является C<V1…Vk>, вывод зависит от i-го параметра типа C:
· Если он ковариантен, выполняется вывод по нижней границе.
· Если он контрвариантен, выполняется вывод по верхней границе.
· Если он инвариантен, выполняется точный вывод.
· Иначе вывод не производится.
Вывод по верхним границам
Вывод верхних границ из типа U в тип V выполняется следующим образом.
· Если V является одним из нефиксированных Xi, то U добавляется к набору верхних границ для Xi.
· Иначе, наборы V1…Vk и U1…Ukопределяются проверкой применимости одного из следующих случаев:
· U является типом массива U1[…]и V является типом массива V1[…] того же ранга.
· U — один из IEnumerable<Ue>, ICollection<Ue> или IList<Ue>, а V — тип одномерного массива Ve[].
· U является типом U1? и V является типом V1?.
· U — сформированный класс, структура, интерфейс или тип делегата C<U1…Uk>, а V — класс, структура, интерфейс или тип делегата, идентичный, наследующий от (напрямую или косвенно), или реализующий (напрямую или косвенно) уникальный тип C<V1…Vk>.
(Ограничение "уникальности" означает, что в случае interface C<T>{} class V<Z>: C<X<Z>>, C<Y<Z>>{} при выводе из C<U1> в V<Q> вывод производиться не будет. Вывод не выполняется из U1 в X<Q> или Y<Q>.)
Если применим хотя бы один из этих случаев, выполняется точный вывод из каждого Ui в соответствующий Vi следующим образом:
|
· Если неизвестно, что Ui является ссылочным типом, выполняется точный вывод.
· Иначе, если V является типом массива, выполняется вывод по верхней границе.
· Иначе, если U является C<U1…Uk>, вывод зависит от i-го параметра типа C:
· Если он ковариантен, выполняется вывод по верхней границе.
· Если он контрвариантен, выполняется вывод по нижней границе.
· Если он инвариантен, выполняется точный вывод.
· Иначе вывод не производится.
Фиксирование
Нефиксированная переменная типа Xi с набором границ фиксируется следующим образом.
· Набор типов кандидатов Uj изначально формируется как набор всех типов в наборе границ для Xi.
· Затем по очереди проверяется каждая граница для Xi: для каждой точной границы U для Xi все типы Uj, не являющиеся идентичными U, удаляются из набора кандидатов. Для каждой нижней границы U для Xi из набора кандидатов удаляются все типы Uj, в которые не существует неявного преобразования из U. Для каждой верхней границы U для Xi из набора кандидатов удаляются все типы Uj, из которых не существует неявного преобразования в U.
· Если среди оставшихся типов-кандидатов Uj имеется уникальный тип V, из которого существует неявное преобразование во все остальные типы-кандидаты, то Xi фиксируется в V.
· Иначе вывод типа завершается сбоем.
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!