Почему частичные методы могут иметь только возвращаемый тип void? - PullRequest
8 голосов
/ 07 марта 2012

В чем причина / логика / препятствие для того факта, что частичные методы могут иметь только тип возврата void?

спасибо

Ответы [ 3 ]

11 голосов
/ 07 марта 2012

Частичные методы предназначены для исключения, если вы не предоставили для них реализацию.Компилятор фактически удаляет вызовы к частичным методам, которые не реализованы.

Это также подчеркивает, почему они не могут ничего возвратить: если вы полагались на возвращаемое значение без реализации частичного метода, что тогда?У вас есть что-то неинициализированное, несмотря на то, что код четко показывает назначение.

Аналогично, методы, использующие атрибут Conditional , могут возвращать void только по той же причине.Вызов метода может существовать или не существовать в скомпилированном IL.

3 голосов
/ 07 марта 2012

Реализация частичных методов подразумевается как необязательная.

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

Это означает, что у него не должно быть побочных эффектов - фактически никаких возвращаемых значений или параметров "out", они не могут быть виртуальными и всегда являются частными.

Подробнее здесь .

0 голосов
/ 07 марта 2012

Не реализованные частичные методы удаляются во время компиляции.Компилятор может игнорировать вызов методов void, поскольку они изменяют только состояние уже существующего объекта.Он не может удалить методы, которые возвращают объекты, потому что это сделает код недействительным.

...