C # перегрузка с переопределением

Я, конечно, могу ответить на этот вопрос, написав фиктивный тест, но я хочу знать, что люди думают по этому вопросу. Вот:

Какой метод будет вызываться, когда у нас одновременно будет перегрузка и переопределение? Я рассматриваю только перегрузку Типа, а не перегрузку арности, и когда Тип перегрузка связана.

Позвольте мне привести вам пример:

class AA {}
class BB : AA {}

class A {
    public virtual void methodA(AA anAA) { Console.Write("A:methodA(AA) called"); }
    public virtual void methodA(BB aBB) { Console.Write("A:methodA(BB) called"); }
}

class B : A {
    public override void methodA(AA anAA) { Console.Write("B:methodA(AA) called"); }
}

new B().methodA(new BB());     // Case 1
new B().methodA(new AA());     // Case 2
new B().methodA((AA)new BB()); // Case 3

Можете ли вы сказать, что произойдет в случаях 1, 2 и 3?

Я лично считаю, что перегрузка - это зло, и что нет последовательного мышления, которое могло бы привести к предсказуемому ответу. И это полностью основано на соглашении, реализованном в компиляторе + vm.

РЕДАКТИРОВАТЬ: Если у вас есть некоторые сомнения по поводу того, почему перегрузка является злом, вы можете прочитать сообщение в блогеГилад Брах

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос