C # разрешение перегрузки? - PullRequest
7 голосов
/ 29 мая 2010

Из статьи Интервью Андерса Хейсберга , «способ, которым мы используем разрешение перегрузки в C #, отличается от любого другого языка» Может кто-нибудь привести примеры с C # и Java?

Ответы [ 2 ]

18 голосов
/ 29 мая 2010

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

Вероятно, наиболее распространенным примером этого является правило в C #, что, если какой-либо метод в классе с более производным классом является подходящим кандидатом, он автоматически лучше, чем любой метод в классе с менее производным классом, , даже если метод менее производный имеет лучшее совпадение подписи . Насколько мне известно, это правило не встречается в других языках с разрешением перегрузки. Это кажется нелогичным; если есть метод, который лучше соответствует подписи, почему бы не выбрать его? Причина в том, что метод, который лучше соответствует сигнатуре , мог быть добавлен в более поздней версии и, таким образом, вводил ошибку "хрупкий базовый класс".

Дополнительные сведения о том, как различные языки обрабатывают хрупкие сбои базового класса, см.

.

http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/

и для получения дополнительной информации о разрешении перегрузки см.

http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/

1 голос
/ 29 мая 2010

Способ, которым C # обрабатывает перегрузку с внутренней точки зрения , - вот что отличается.

Полная цитата Андерса:

Я всегда описывал себя как Прагматичный парень. Это смешно, потому что управление версиями оказалось одним из столпы нашего языкового дизайна. Это обнаруживается в том, как вы переопределяете виртуальный методы в C #. Кроме того, как мы делаем разрешение перегрузки в C # отличается с любого другого языка, который я знаю, для причины версий. Всякий раз, когда мы смотрел на разработку конкретного особенность, мы всегда будем проверять с версиями. Мы бы спросили: «Как версия изменяет это? Как эта функция из версии в перспективе? »Оказывается, что большинство языковой дизайн раньше дал очень немного подумать об этом.

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