Преимущества и недостатки "динамического" ключевого слова C# 4.0?

Я узнал и проверил преимущества dynamic Ключевое слово в C# 4.

Может ли любое тело сказать мне недостатки этого. Средства dynamic против Var/Object/reflection???

Какая вещь больше подходит. Является dynamic более мощный во время выполнения??

2 ответа

Решение

Не совсем var vs dynamic, но следующая ссылка SO обсуждает отражение против динамического. Выезд: динамический против Var/ объект / отражение

Одна из самых интересных вещей с dynamic Ключевое слово, которое вы можете сделать, это: реализация нескольких отправлений.

Вот пример двойной отправки (частный случай множественной отправки). В ООП во время выполнения вызывается конкретная реализация виртуального (или абстрактного) метода, основанная на типе времени выполнения одного объекта, который передается как 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)

Таким образом, фактический метод выбирается во время выполнения на основе типа времени выполнения двух объектов, а не одного объекта.

Другие вопросы по тегам