Более подходящая функция-член — КиберПедия 

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Более подходящая функция-член

2017-10-16 291
Более подходящая функция-член 0.00 из 5.00 0 оценок
Заказать работу

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

Списки параметров для каждого кандидата функции-члена формируется следующим способом:

· Расширенная форма используется в случае, если функция-член была применима только в расширенной форме.

· Необязательные параметры без соответствующих аргументов удаляются из списка параметров

· Порядок параметров изменяется таким образом, что они встречаются в той же позиции, что и соответствующий аргумент в списке аргументов.

При наличии списка аргументов A с набором выражений аргументов { E1, E2,..., EN } и двух применимых функций-членов MP и MQ с типами параметров { P1, P2,..., PN } и { Q1, Q2,..., QN } MP считается более подходящей функцией-членом, чем MQ, если

· для каждого аргумента неявное преобразование из EX в QX не лучше неявного преобразования из EX в PX и

· по крайней мере для одного аргумента преобразование из EX в PX лучше преобразования из EX в QX.

При проведении этой оценки если MP или MQ применима в расширенной форме, то PX или QX относится к параметру в расширенной форме списка параметров.

Если последовательности типов параметров {P1, P2, …, PN} и {Q1, Q2, …, QN} идентичны (т. е. для каждого Pi имеется тождественное преобразование в соответствующий Qi), то для определения более подходящей функции-члена применяются следующие правила разрешения.

· Если MP не является универсальным методом, а MQ — универсальный метод, то MP является более подходящей, чем MQ.

· Иначе, если MP применима в нормальной форме, а MQ имеет массив params и применима только в расширенной форме, то MP является более подходящей, чем MQ.

· В противном случае, если у MP больше объявленных параметров, чем у MQ, то MP является более подходящей, чем MQ. Это может происходить, когда у обеих функций-членов есть массивы params, применимые только в расширенных формах.

· Иначе, если у всех параметров MP есть соответствующий аргумент, тогда как аргументы по умолчанию должны быть заменены на по меньшей мере один необязательный параметр в MQ, то MP является более подходящей, чем MQ.

· В противном случае, если у MP более конкретные типы параметров, чем у MQ, то MP является более подходящей, чем MQ. Пусть наборы {R1, R2, …, RN} и {S1, S2, …, SN} представляют нерасширенные типы параметров без экземпляров для MP и MQ. Типы параметров MP являются более конкретными, чем у MQ, если для любого параметра RX является не менее конкретным, чем SX, и по крайней мере один параметр RX является более конкретным, чем SX.

o Параметр типа является менее конкретным, чем не параметр типа.

o Один сформированный тип является более конкретным, чем другой (с таким же числом аргументов типа), если у первого типа по крайней мере один аргумент типа является более конкретным по сравнению с соответствующим аргументом типа второго типа и нет аргументов типа менее конкретных по сравнению с соответствующими аргументами типа другого сформированного типа.

o Тип массива является более конкретным, чем другой тип массива (с таким же числом измерений), если тип элементов первого является более конкретным, чем тип элементов второго.

· Иначе, если один член не является оператором с нулификацией, а другой является, то оператор без нулификации считается более подходящим.

· Иначе определить более подходящую функцию-член нельзя.

7.5.3.3 Лучшее преобразование из выражения

При наличии неявного преобразования C1, которое переводит выражение E в тип T1, и неявного преобразования C2, которое переводит выражение E в тип T2, C1 является лучшим преобразованием, чем C2, если верно хотя бы одно из следующих утверждений:

· E имеет тип S, также существует преобразование идентификации из S в T1, но не из S в T2.

· E не является анонимной функцией, а T1 является более подходящей целью преобразования, чем T2 (§7.5.3.5).

· E является анонимной функцией, T1 является либо типом делегата D1, либо типом дерева выражения Expression<D1>, T2 является либо типом делегата D2, либо типом дерева выражения Expression<D2>, и верно одно из следующих утверждений:

o D1 является более подходящей целью преобразования, чем D2.

o D1 и D2 имеют идентичные списки параметров, и верно одно из следующих утверждений:

· D1 имеет тип возвращаемого значения Y1, а D2 — тип возвращаемого значения Y2, выведенный тип возвращаемого значения X существует для E в контексте данного списка параметров (§7.5.2.12), и преобразование из X в Y1 является более подходящим, чем преобразование из X в Y2.

· E является асинхронным выражением, D1 имеет тип возвращаемого значения Task<Y1>, а D2 имеет тип возвращаемого значения Task<Y2>, выведенный тип возвращаемого значения Task<X> существует для E в контексте данного списка параметров (§7.5.2.12), и преобразование из X в Y1 является более подходящим, чем преобразование из X в Y2.

· D1 имеет тип возвращаемого значения Y, а D2 возвращает значение void

7.5.3.4 Лучшее преобразование из типа

При наличии преобразования C1, которое переводит тип S в тип T1, и преобразования C2, которое переводит тип S в тип T2, C1 является лучшим преобразованием, чем C2, если верно хотя бы одно из следующих утверждений:

· Существует тождественное преобразование из S в T1, и не существует преобразования из S в T2.

· T1 является лучшей целью для преобразования, чем T2 (§7.5.3.5).

7.5.3.5 Лучшая цель для преобразования

В случае, если даны два различных типа T1 и Т2, Т1 является лучшей целью для преобразования, чем Т2, если верно одно из следующих утверждений:

· Существует неявное преобразование из T1 в T2, и нет неявного преобразования из T2 в T1.

· T1 является целым типом со знаком, а T2 является целым типом без знака. А именно:

o T1 имеет тип sbyte, а T2 имеет тип byte, ushort, uint или ulong

o T1 имеет тип short, а T2 имеет тип ushort, uint или ulong.

o T1 имеет тип int, а T2 имеет тип uint или ulong.

o T1 равно long и T2 равно ulong.


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.