Почему компилятор выбирает версию, которая принимает A, когда B является более производным классом?
blockquote>Как отмечали другие, компилятор делает это, потому что это то, что говорит спецификация языка.
Это может быть неудовлетворительный ответ. Естественным продолжением было бы «какие принципы дизайна несут в себе решение указать язык таким образом?»
Это часто задаваемый вопрос, как в StackOverflow, так и в моем почтовом ящике. Краткий ответ: «Этот проект смягчает семейство ошибок класса Brittle Base Class».
Описание функции и ее описание так, как показано в моей статье на эту тему:
http://blogs.msdn.com/ b / ericlippert / archive / 2007/09/04 / future-break-changes-part-three.aspx
Дополнительные статьи о том, как различные языки относятся к базовому классу Brittle Base проблема см. в моем архиве статей по теме:
http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/
Вот мой ответ на тот же вопрос с прошлой недели, который выглядит замечательно, как этот.
Почему сигнатуры, объявленные в базовом классе, игнорируются?
И вот еще три актуальных или дублированных вопроса:
Метод перегружает разрешение и мозговые тизеры Джона Скита
Почему это работает? Перегрузка метода + переопределение метода + полиморфизм