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

Wah*_*eed 7 .net c# dynamic c#-4.0

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

任何人都可以告诉我这个的缺点.指dynamicVS Var/ Object/ reflection???

哪个更重要.是dynamic在运行时更加强大?

Naw*_*waz 14

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)");
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:

(D1,D2)
(D2,D1)
Run Code Online (Sandbox Code Playgroud)

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


Paw*_*hra 1

不完全是 var 与动态,但以下链接讨论了反射与动态。检查:动态与 Var/Object/reflection