C # -Überladung mit Override

Ich kann diese Frage sicherlich selbst beantworten, indem ich einen Dummy-Test schreibe, aber ich möchte wissen, was die Leute über die Frage denken. Hier ist es:

Welche Methode wird aufgerufen, wenn wir beide gleichzeitig überladen und überschreiben? Ich betrachte nur Typüberlastung und nicht Aritätsüberlastung und wenn Typ die Überlastung in Beziehung steht.

Lassen Sie mich Ihnen ein Beispiel geben:

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

Können Sie sagen, was in den Fällen 1, 2 und 3 passieren wird?

Ich persönlich denke, dass Überlastung böse ist und dass es kein konsequentes Denken gibt, das zu einer vorhersehbaren Antwort führen könnte. Und das basiert vollständig auf einer Konvention, die im Compiler + vm implementiert ist.

BEARBEITEN: Wenn Sie Zweifel haben, warum Überlastung böse ist, können Sie den Blog-Beitrag von lesenGilad Brach

Vielen Dank

Antworten auf die Frage(3)

Ihre Antwort auf die Frage