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

7.5.2.1Первый этап

Для каждого аргумента метода Ei:

  • Если Ei является анонимной функцией, выполняется явный вывод типа параметра (§7.5.2.7) из Ei к Ti

  • В противном случае, если Ei имеет тип U, а xi - параметр значения, выполняется вывод по нижней границе от U до Ti.

  • В противном случае, если Ei имеет тип U, а xi - ссылка или параметр out, выполняется точный вывод от U до Ti.

  • В противном случае вывод для этого аргумента не выполняется.

7.5.2.2Второй этап

Второй этап продолжается следующим образом.

  • Фиксируются все нефиксированные переменные типа Xi, которые не зависят (§7.5.2.5) от каких-либо Xj (§7.5.2.10).

  • Если таких переменных типа нет, то фиксируются все нефиксированные переменные типа Xi, для которых верно, что

    • существует по крайней мере одна переменная типа Xj, которая зависит от Xi;

    • у Xi имеется непустой набор границ.

  • Если таких переменных типа не существует и все еще остаются нефиксированные переменные типа, то вывод типа завершается сбоем.

  • Иначе, если нефиксированных переменных типа больше не существует, вывод типа завершается успешно.

  • Иначе для всех аргументов Ei с соответствующим типом параметра Ti, где выходные типы (§7.5.2.4) содержат нефиксированные переменные типа Xj, а входные типы (§7.5.2.3) не содержат, выполняется вывод выходного типа (§7.5.2.6) из Ei к Ti. После этого второй этап повторяется.

7.5.2.3Типы ввода

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

7.5.2.4 Типы вывода

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

7.5.2.5Зависимость

Нефиксированная переменная типа Xi непосредственно зависит от нефиксированной переменной типа Xj, если для некоторого аргумента Ek с типом Tk Xj оказывается в типе ввода Ek с типом Tk, а Xi оказывается в типе вывода Ek с типом Tk.

Xj зависит от Xi, если Xj непосредственно зависит от Xi или если Xi непосредственно зависит от Xk и Xk зависит от Xj. Таким образом, отношение «зависит от» является транзитивным, но не является рефлексивным замыканием отношения «непосредственно зависит от».

7.5.2.6Вывод типа вывода

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

  • Если E является анонимной функцией с полученным типом возвращаемого значения U (§7.5.2.12), а T является типом делегата или типом дерева выражения с типом возвращаемого значения Tb, то выполняется вывод по нижней границе (§7.5.2.9) из U к Tb.

  • Иначе, если E является группой методов, а T является типом делегата или типом дерева выражений с типами параметров T1…Tk и типом возвращаемого значения Tb, и разрешение перегрузки E с типами T1…Tk дает один метод с типом возвращаемого значения U, то выполняется вывод по нижней границе из U к Tb.

  • Иначе, если E является выражением с типом U, то выполняется вывод по нижней границе из U к T.

  • Иначе вывод не производится.

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