Sobrecarga de C # con anulación

Seguramente puedo responder a esta pregunta escribiendo una prueba ficticia, pero quiero saber qué piensa la gente sobre la pregunta. Aquí está:

¿De qué método se llamará cuando tengamos ambos sobrecargas y anulaciones al mismo tiempo? Solo estoy considerando la sobrecarga de tipos y no la sobrecarga de datos y cuándo se relaciona la sobrecarga de tipos.

Déjame darte un ejemplo:

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

¿Puedes decir qué sucederá en los casos 1, 2 y 3?

Personalmente, creo que la sobrecarga es mala y que no hay un pensamiento coherente que pueda conducir a una respuesta predecible. Y eso es completamente basado en una convención implementada en el compilador + vm.

EDITAR: Si tiene alguna duda sobre por qué la sobrecarga es mala, puede leer la publicación del blog deGilad Brach

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta