Что Андерс получил здесь, так это то, что первоначальная команда разработчиков явно разработала алгоритм разрешения перегрузки, чтобы иметь определенные свойства, которые хорошо работали со сценариями управления версиями, даже если эти свойства кажутся задом наперед или запутанными, если рассматривать сценарии без управления версиями. *
Вероятно, наиболее распространенным примером этого является правило в C #, что, если какой-либо метод в классе с более производным классом является подходящим кандидатом, он автоматически лучше, чем любой метод в классе с менее производным классом, , даже если метод менее производный имеет лучшее совпадение подписи . Насколько мне известно, это правило не встречается в других языках с разрешением перегрузки. Это кажется нелогичным; если есть метод, который лучше соответствует подписи, почему бы не выбрать его? Причина в том, что метод, который лучше соответствует сигнатуре , мог быть добавлен в более поздней версии и, таким образом, вводил ошибку "хрупкий базовый класс".
Дополнительные сведения о том, как различные языки обрабатывают хрупкие сбои базового класса, см.
.
http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/
и для получения дополнительной информации о разрешении перегрузки см.
http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/