class Base
{
public virtual void MethodA(int x)
{
Console.WriteLine ("In Base Class");
}
}
class Derived : Base
{
public override void MethodA(int x)
{
Console.WriteLine ("In derived INT)");
}
public void MethodA(object o)
{
Console.WriteLine ("In derived OBJECT");
}
}
class Test
{
static void Main()
{
Derived d = new Derived();
int k = 20;
d.MethodA(k);
}
}
La sortie que j'ai eu pour ceci est "In OBJECT dérivé". Quelle est la raison de ce comportement étrange? Après quelques recherches, j'ai découvert que la raison est les signatures déclarées dans la classe de base sont ignorées. Pourquoi sont-ils ignorés?Pourquoi les signatures déclarées dans la classe de base sont-elles ignorées?
+1 à la question, je suis d'accord ce comportement contre-intuitif. –
Je suis d'accord que le comportement est étrange. Je voudrais savoir: demandez-vous cela parce que vous voulez vraiment faire cela ou parce que vous étiez curieux? Je ne vois pas de raison d'implémenter quelque chose comme ça, mais j'aimerais bien savoir pourquoi cela arrive. –
duplication possible de [Comment la méthode de masquage fonctionne en C#? (Deuxième partie)] (http://stackoverflow.com/questions/710459/how-method-hiding-works-in-c-part-two) –