Warum wird nach dem Start des Programms angezeigt C::Foo(object o)
?Warum Überladung nicht funktioniert?
using System;
namespace Program
{
class A
{
static void Main(string[] args)
{
var a = new C();
int x = 123;
a.Foo(x);
}
}
class B
{
public virtual void Foo(int x)
{
Console.WriteLine("B::Foo");
}
}
class C : B
{
public override void Foo(int x)
{
Console.WriteLine("C::Foo(int x)");
}
public void Foo(object o)
{
Console.WriteLine("C::Foo(object o)");
}
}
}
Ich kann nicht verstehen, warum, wenn Sie C :: Foo
nennen, Methode mit dem object
auswählt, nicht mit int
. Was ist die Klasse B
und diese Methode ist als Überschreibung markiert?
In Klasse C
gibt es zwei Methoden mit dem gleichen Namen, aber unterschiedlichen Parametern, ist es nicht überladen? Warum nicht? Ist es wichtig, dass eine der Methoden im übergeordneten Objekt außer Kraft gesetzt wird? Es deaktiviert irgendwie Überlastung?
Einfache Antwort. Tu das nicht. Verwenden Sie keine Überladung mit Objekten. Verwenden Sie Generika oder gar kein dynamisches Objekt – Mick