我有基類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爲什麼它不是擴展方法?
'B'不是嵌套的,而是繼承的。 –
@Henk Holterman謝謝 – user854301
如果對象有相同名稱的方法,則不調用擴展方法。這是爲了避免破壞舊代碼,期望是調用舊方法而不是新擴展。 – Ankush