Я, безусловно, могу ответить на этот вопрос сам, написав фиктивный тест, но хочу знать, что люди думают по этому вопросу. Вот он:Перегрузка C# с переопределением
Какой метод будет вызывать, когда у нас есть одновременно перегрузка и переопределение? Я рассматриваю только перегрузку типа, а не перегрузку arity и когда тип перегрузки связан.
Позвольте мне бросить вам пример:
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?
Я лично считаю, что перегрузка является злом и что нет постоянного мышления, которое могло бы привести к предсказуемому ответу. И это полностью основано на соглашении, реализованном в компиляторе + vm.
EDIT: Если у вас есть какие-то сомнения о том, почему перегрузка зло вы можете прочитать сообщение в блоге от Gilad Brach
Благодарности
вы имеете в виду JIT компилятор, не так ли? –
Нет, я не имею в виду JIT-компилятор. Если у вас нет соответствующего метода для вызова, у вас будет ошибка времени компиляции. –
Ваша первая ссылка сломана – mathk