在一個應用程序中,我需要.NET根據它的運行時類型而不是它的編譯時類型來調用一個方法。基於編譯時類型的運行時類型insead的調用方法
簡單的例子:
class A { }
class B : A { }
static void Main(string[] args)
{
A b = new B();
Print(b);
}
static void Print(A a)
{
Console.WriteLine("Called from A");
}
static void Print(B b)
{
Console.WriteLine("Called from B");
}
上面的代碼將實際打印Called from A
,但我需要它Called from B
。
這按預期工作:
static void Print(A a)
{
var b = a as B;
if (b != null)
return Print(b);
else
Console.WriteLine("Called from A");
}
但對於可維護性的緣故,這是不可取的。
我相信這個問題類似於這個:Why isn't this method chosen based on the runtime-type of its object?,但是.NET代替了Java。
除非有一個很好的理由打印是一個靜態成員.. ..打印應該是A&B的實例成員。然後,您可以使方法變爲虛擬並在B中重寫以完成此任務。 –
@ P.Brian.Mackey我可能會這樣做,如果可以的話,但我不能改變它們。 – Meryovi