我有一个基类A
public class A
{
public virtual void Method(A parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
public virtual void Method(B parameter)
{
Console.WriteLine(MethodBase.GetCurrentMethod());
}
}
继承了 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???
为什么编译器没有选择更合适的方法?更新:为什么它不是扩展方法?
B
不是嵌套的,而是被继承的。 - H H