Sobrecarga C # com override
Eu certamente posso responder a essa pergunta escrevendo um teste simulado, mas quero saber o que as pessoas pensam sobre a questão. Aqui está:
Qual método será chamado quando temos as duas coisas sobrecarregando e substituindo ao mesmo tempo? Eu estou considerando apenas sobrecarga de tipo e não sobrecarga de aridade e quando digite sobrecarga estão relacionados.
Deixe-me te dar um exemplo:
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
Você pode dizer o que acontecerá no caso 1, 2 e 3?
Pessoalmente, penso que overloadaing é um mal e que não existe um pensamento consistente que possa levar a uma resposta previsível. E isso é completamente baseado em uma convenção implementada no compilador + vm.
EDIT: Se você tem alguma dúvida sobre por que a sobrecarga é mal você pode ler o post do blog deGilad Brach
obrigado