ダミーテストを書くだけで確実に答えることができますが、人々がどう思っているのか知りたいです。ここにあります:
オーバーロードとオーバーライドの両方が同時に発生した場合、どちらのメソッドが呼び出されますか?私はタイプのオーバーロードのみを考慮しており、アリティのオーバーロードは考慮していません。タイプのオーバーロードは関連しています。
例を挙げましょう。
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で何が起こるかわかりますか?
私は個人的に、過負荷は悪であり、予測可能な答えにつながる可能性のある一貫した考え方はないと思います。そして、それは完全にcompiler+vmに実装された規則に基づいています。
編集:過負荷が悪である理由について疑問がある場合は、GiladBrachのブログ投稿を読むことができます
ありがとう