Почему после запуска программа будет отображаться C::Foo(object o)
?
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)");
}
}
}
Не могу понять, почему, когда вы вызываете C :: Foo
, выбираете метод с object
, а не с int
. Что класс B
и этот метод отмечен как переопределение?
В классе C
существует два метода с тем же именем, но с разными параметрами, не перегружен ли он? Почему нет? Имеет ли значение, что один из методов должен быть переопределен в родительском? Это как-то отключает перегрузку?