Tag: dynamic typing

.NET 4.0中新的“动态”变量类型是否解决了CLR中的单/多方法调度问题?

单个调度的问题对于使用Java和C#等静态类型语言进行编码的人来说大多是熟悉的。 基本思路是: 运行时多态性允许我们根据receiver的类型(运行时类型)调度到正确的方法调用,例如: IAnimal mything = new Cat(); mything.chop(); 方法调用将根据mything的运行时类型mything ,即Cat 。 这是单一调度function(存在于Java / C#中)。 现在,如果您不仅需要调度接收器的运行时类型,还需要调度(多个)参数的类型,那么您将面临一个小问题: public class MyAcceptor { public void accept (IVisitor vst) {…} public void accept (EnhancedConcreteVisitor vst) {…} } 第二种方法永远不会被调用,因为在我们的“消费者”代码中,我们倾向于通过常见的超类型或接口来处理不同类型的对象(在我的示例中为访问者)。 这就是我问的原因 – 因为动态类型允许多调度多态,而C#4.0有动态关键字;)