c# 4.0的优缺点'动态'关键字

本文关键字:动态 关键字 优缺点 | 更新日期: 2023-09-27 18:15:25

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

有谁能告诉我这个的缺点吗?意味着dynamic vs Var/Object/reflection ??

哪个东西更棒?dynamic在运行时更强大吗??

c# 4.0的优缺点'动态'关键字

使用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 vs dynamic,而是下面的SO链接讨论反射vs动态。查看:动态vs Var/Object/reflection