在应用程序中,我需要 .NET 根据其运行时类型而不是编译时类型调用方法。
简化示例:
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");
}
但是为了可维护性,这是不可取的。
我相信这个问题与这个问题相似:为什么不根据对象的运行时类型选择此方法?,但适用于 .NET 而不是 Java。