为什么 C# 本身不支持通过基于参数类型的“动态重载”进行双重分派?我看到这需要动态调度,但由于虚拟方法调用也是动态调度的,这对语言来说并不奇怪。那么为什么这个特性不是 C# 的一部分呢?使用反射实现此功能的最优雅的解决方案是什么(也许有一些库)?
class Program
{
static void Main(string[] args)
{
var objs = new object[] { new Class1(), new Class2() };
foreach (var item in objs)
{
Method(item);
}
}
static void Method(Class1 obj)
{
}
static void Method(Class2 obj)
{
}
}
class Class1
{
}
class Class2
{
}
确实是更新,因为Method
在这个例子中不是虚拟的并且只接受一个参数,这仍然是单次调度,但调度的“基数”在这个问题中并不那么重要,只要它> 0。