c# - C# 4.0 'dynamic' 关键字的优点和缺点?

标签 c# .net c#-4.0 dynamic

<分区>

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

谁能告诉我这样做的缺点。表示 dynamic vs Var/Object/reflection ???

哪个东西更面糊。 dynamic 在运行时是否更强大?

最佳答案

dynamic 关键字最有趣的事情之一是:实现多重分派(dispatch)。

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

举个例子:

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)

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

关于c# - C# 4.0 'dynamic' 关键字的优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203347/

相关文章:

c# - 更改 protected 工作表

.net - 如何将巨大(但简单)的分层 XML 文件加载到 SQL 表中

.net - 使用 .net 连接器连接 Couchbase 服务器时出现异常

c# - 检查所选日期是否在预定义假期的三天内

c# - 获取花括号之间的值c#

c# - 使用 int 和 String 的 LINQ to SQL C# 函数

c# - 基于 Microsoft 的触摸/手写笔输入

c# - 替换对象列表中的对象

c# - 这个 lambda 函数是如何工作的?

c# - 在 Windows 应用程序中导入 Excel 工作表后,DataGridView 显示额外的数字