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);
}
}
Die Ausgabe, die ich dafür erhalte, ist " In abgeleitetem OBJECT ". Was ist der Grund für dieses seltsame Verhalten? Nach einigen Nachforschungen habe ich herausgefunden, dass der Grund ist die in der Basisklasse deklarierten Signaturen werden ignoriert . Warum werden sie ignoriert?
1 Stimmen
+1 zur Frage: Ich stimme zu, dass dies ein kontra-intuitives Verhalten ist.
0 Stimmen
Ich stimme zu, dass das Verhalten seltsam ist. Ich möchte wissen, ob Sie diese Frage stellen, weil Sie dies tatsächlich tun wollen, oder weil Sie neugierig waren? Ich sehe keinen Grund, so etwas tatsächlich zu implementieren, aber ich würde auf jeden Fall gerne wissen, warum es passiert.
0 Stimmen
こと Wie Methodenverstecken in C# funktioniert (Teil Zwei)
0 Stimmen
Der Code in der Frage ist fast identisch mit dem in dieser Antwort: stackoverflow.com/questions/710459/ So, das war's.