【发布时间】:2014-10-01 20:12:18
【问题描述】:
为什么 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
{
}
UPDATE 确实,因为在这个例子中Method 不是虚拟的,并且只接受一个参数,这仍然是单次调度,但调度的“基数”在这个问题中并不那么重要,因为只要 > 0。
【问题讨论】:
-
在 C#/C++ 和 Java 中通过模板/泛型至少可以使用某种形式的参数多态性。
标签: c# .net parametric-polymorphism