У меня есть базовый класс A
public class A
{
public virtual void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public virtual void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
Inhereted B
public class B : A
{
public virtual void Method(object parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public override void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
Статический класс S
с методом расширения
public static class S
{
public static void Method(this B instance, B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
Пример: мы создаем экземпляр типа B
и вызываем Method
на нем, мы ожидаем, что он будет public override void Method(B parameter)
действительным результатом public virtual void Method(object parameter)
.
var b = new B();
b.Method(new B()); // B.Method (Object parameter) Why???
Почему компилятор не выбирает более подходящий метод??? UPD И почему это не метод расширения?