Вопрос

В C# 4.0 представлены dynamic ключевое слово, которое будет искаться во время выполнения.

Означает ли это, что нам больше не понадобятся неловкие размышления?Если да, можете ли вы показать это на примере?

Это было полезно?

Решение

У нас все еще будет Reflection - использование 'dynamic' для обычных объектов CLR вызовет диспетчер на основе Reflection.

Итак, у нас все еще будет Reflection, но это будет легче сделать.

Вот пример:

// Via 'dynamic'    
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;

// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);

Я не знаю как вы, но мне нравится первое. =)

В обоих этих случаях я не получаю ни проверки во время компиляции, ни Intellisense, ни поддержки IDE, но первый случай гораздо более выразителен, чем второй.

Другие советы

Динамическая отправка - это только одно возможное использование Reflection. Есть много веских причин для того, чтобы опросить класс на предмет его структуры, получить информацию об этой структуре и визуализировать ее в какой-либо форме или воздействовать на нее каким-либо образом без какого-либо динамического доступа к членам. Отражение здесь, чтобы остаться. :)

Если вам нужны примеры динамического ключевого слова, вот видео с PDC сам человек говорит об этом (и другие вещи C # 4.0 связанные с).

Dynamic будет иметь большое значение для решения проблем с методами, известными только по имени, где это имя известно и фиксируется во время компиляции - но, конечно, такие методы также могут быть выражены как интерфейсы, если вы управляете типами.

Бывают случаи, когда dynamic вообще не поможет:

  • где имя метода неизвестно во время компиляции (т.е.он загружается из конфигурации/пользовательского ввода)
  • создание объекта
  • возможно, некоторые общие сценарии

Самое большое применение, которое я вижу dynamic являются:

  • COM-взаимодействие (очевидно)
  • общая поддержка операторов
  • дак печатаем там, где нет общего интерфейса
  • Взаимодействие с DLR (см. комментарии)

Но это определенно не решает все проблемы с отражением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top