C#4.0'的优缺点;动态';关键词?

C#4.0'的优缺点;动态';关键词?,c#,.net,c#-4.0,dynamic,C#,.net,C# 4.0,Dynamic,我已经学习并检查了C#4中dynamic关键字的优点 谁能告诉我这有什么坏处吗。是指动态vsVar/对象/反射 哪一种东西更甜。动态在运行时是否更强大 不完全是var与dynamic,但下面的链接讨论反射与dynamic。签出:使用动态关键字,您可以做的最有趣的事情之一是:实现多重分派 这里是双重分派的一个示例(多重分派的一个特定案例)。在OOP中,在运行时根据作为this传递给成员函数的一个对象的运行时类型调用虚(或抽象)方法的特定实现。这称为单一分派,因为分派取决于单个对象的运行时类型。在双

我已经学习并检查了C#4中
dynamic
关键字的优点

谁能告诉我这有什么坏处吗。是指
动态
vs
Var
/
对象
/
反射


哪一种东西更甜。
动态
在运行时是否更强大

不完全是var与dynamic,但下面的链接讨论反射与dynamic。签出:

使用
动态
关键字,您可以做的最有趣的事情之一是:实现多重分派

这里是双重分派的一个示例(多重分派的一个特定案例)。在OOP中,在运行时根据作为
this
传递给成员函数的一个对象的运行时类型调用虚(或抽象)方法的特定实现。这称为单一分派,因为分派取决于单个对象的运行时类型。在双重分派中,它取决于两个对象的类型

以下是一个例子:

public abstract class Base {}
public class D1 : Base {}
public class D2 : Base {}
public class D3 : Base {}

public class Test
{
   public static void Main(string[] args)
   {
       Base b1 = new D1();
       Base b2 = new D2();

       Method(b1,b2); //calls 1
       Method(b2,b1); //calls 1: arguments swapped!
   }

   public static void Method(Base b1, Base b2) // #1
   {
        dynamic x = b1;
        dynamic y = b2;

        Method(x,y); // calls 2 or 3: double-dispatch - the magic happens here!

   }
   public static void Method(D1 d1, D2 d2) // #2
   {
       Console.WriteLine("(D1,D2)");
   }
   public static void Method(D2 d2, D1 d1) // #3: parameters swapped 
   {
       Console.WriteLine("(D2,D1)");
   }
}
输出:

(D1,D2)
(D2,D1)

也就是说,实际方法是在运行时选择的,基于运行时类型的两个对象,而不是一个对象。

Var/reflection不正确。Var是在编译时计算的隐式类型变量。另一方面,反射是在运行时计算的。我认为反射会比var更支持dynamic。如果你不告诉我们你所知道的,我们就不能说你所知道的足够了。有什么好处?请将此信息添加到问题中。