Sobrecarga C # com override

Eu certamente posso responder a essa pergunta escrevendo um teste simulado, mas quero saber o que as pessoas pensam sobre a questão. Aqui está:

Qual método será chamado quando temos as duas coisas sobrecarregando e substituindo ao mesmo tempo? Eu estou considerando apenas sobrecarga de tipo e não sobrecarga de aridade e quando digite sobrecarga estão relacionados.

Deixe-me te dar um exemplo:

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

Você pode dizer o que acontecerá no caso 1, 2 e 3?

Pessoalmente, penso que overloadaing é um mal e que não existe um pensamento consistente que possa levar a uma resposta previsível. E isso é completamente baseado em uma convenção implementada no compilador + vm.

EDIT: Se você tem alguma dúvida sobre por que a sobrecarga é mal você pode ler o post do blog deGilad Brach

obrigado

questionAnswers(3)

yourAnswerToTheQuestion