Является ли тип возвращаемого значения частью подписи или нет?
Это зависит от , почему вы задаете вопрос . Почему тебя это волнует?
Существует два определения сигнатуры метода. Определение языка C # не включает тип возвращаемого значения и использует сигнатуру метода, чтобы определить, разрешены ли две перегрузки. Два метода с одинаковой сигнатурой не допускаются в типе. Поскольку C # не считает возвращаемый тип частью сигнатуры, C # не позволяет двум методам, отличающимся только возвращаемым типом, быть объявленными в одном и том же типе.
CLR, однако, включает тип возвращаемого значения в подписи. CLR позволяет использовать два метода одного типа, которые отличаются только типом возвращаемого значения.
Чтобы быть более конкретным: в C # подпись состоит из методов:
- имя
- количество параметров типа
- количество формальных параметров
- тип каждого формального параметра
- out / ref / value-ness каждого формального параметра
со следующими дополнительными примечаниями:
- ограничения параметров универсального типа не являются частью подписи
- тип возвращаемого значения не является частью подписи
- параметр типа и формальные имена параметров не являются частью подписи
- два метода могут не отличаться * только 1038 * в out / ref
В CLR подпись состоит из:
- имя
- количество параметров типа
- количество формальных параметров
- тип каждого формального параметра , включая modopts и modreqs
- тип возврата , включая modopts и modreqs
- ссылка / значение каждого формального параметра
Обратите внимание, что CLR вообще не делает различий между "ref int" и "out int" при рассмотрении подписей. Обратите внимание, что CLR действительно различает типы modopt / modreq. (То, как компилятор C # работает с типами modopt / modreq, слишком сложно, чтобы подвести итог.)