Przeciążenie C # z nadpisaniem

Z pewnością mogę odpowiedzieć na to pytanie, pisząc fałszywy test, ale chcę wiedzieć, co ludzie myślą o tym pytaniu. Oto jest:

Która metoda zostanie wywołana, gdy mamy jednocześnie przeciążanie i nadpisywanie? Rozważam tylko przeciążenie typu, a nie przeciążenie arity i kiedy powiązane są przeciążenia typu.

Pozwól, że rzucę ci przykład:

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

Czy możesz powiedzieć, co się stanie w przypadku 1, 2 i 3?

Osobiście uważam, że overloadaing jest zły i że nie ma spójnego myślenia, które mogłoby prowadzić do przewidywalnej odpowiedzi. I to jest całkowicie oparte na konwencji zaimplementowanej w kompilatorze + vm.

EDYCJA: Jeśli masz wątpliwości, dlaczego przeciążenie jest złe, możesz przeczytać wpis na bloguGilad Brach

Dzięki

questionAnswers(3)

yourAnswerToTheQuestion