Re[3]: Конкретный вопрос по С#
От: Ярослав Говорунов Украина http://www.helicontech.com
Дата: 13.05.01 18:25
Оценка:
VD>Вообще-то Kiguinko прав!
Я же сразу оговорился, что могу быть не прав. Мое заявление базируется на информации, полученной еще при выходе pre-beta версии. С того момента могло многое измениться.
VD>В доках есть раздел о дефолтных параметрах в C#, то реально облом!
Кстати, а где, если не секрет?

ЯГ>>Обусловлено это спецификой работы .NET. Две причины:

ЯГ>>1. Подставить параметр на вызываемой стороне нельзя, т.к. .NET, как и СОМ работает на интерфейсах, а интерфейс — контракт, в котором форма вызовов методов строго определена. Значит параметр нельзя опустить.

VD>По-моему Вы не правы. Уж точно Вы не правы насчет COM-а. В COM-ме есть дефолтные параметры.

Но они подставляются на вызывающей стороне, насколько я помню.
VD>Да и в CLR-ных языках сделать, это как рас плюнуть. Дело в том, что информацию о параметрах можно разместить в Reflection-информации (.Net-овском аналоге TLB-х).
Именно так это и делается в СОМ.

VD>Я и говорю... НЕ в рантайме, а при компиляции.

Во во. Ключевое слово тут "при компиляции". В то время MS считала, что в .NET не должно быть ничего, что можно сделать только при компиляции.

ЯГ>>... а значит, пропадает контроль за версиями. Как сообщить клиенту, что новая версия объекта в качестве параметра по умолчанию теперь ожидает не 1, а 2?


VD>Скомпилированная программа должна работать с теми предположениями (о значении дефолтных параметров) которые были верными на момент компиляции. Если это будет не так, то вероятность вылет будет 90%.

Я бы привел ссылку, но уже не помню. Давненько я не интересовался как дела у .NET, так что спорить не стану, все могло измениться. В той статье такое поведение объяснялось именно нарушением контроля версий.
Самым лучшим способом проверить — создать на C# метод с параметрами по умолчанию, а потом посмотреть в ildasm. Если будут перегруженные функции, значит дела все еще как и были, если будет запись в Reflection, значит все изменилось...
WBR,
Yaroslav Govorunov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.