Подтвердить что ты не робот

Когда следует использовать динамическое ключевое слово в С# 4.0?

Когда нужно использовать динамическое ключевое слово в С# 4.0?....... Хороший пример с динамическим ключевым словом в С# 4.0, который объясняет его использование....

4b9b3361

Ответ 1

Динамический должен использоваться только , когда его использование не является болезненным. Как в библиотеках MS Office. Во всех остальных случаях его следует избегать, так как проверка типа компиляции выгодна. Ниже приведена хорошая ситуация с использованием динамического.

  • Вызов метода javascript из Silverlight.
  • COM-взаимодействие.
  • Возможно, чтение Xml, Json без создания пользовательских классов.

Ответ 2

Как насчет этого? Что-то я искал и задавался вопросом, почему так трудно обойтись без "динамического".

interface ISomeData {}
class SomeActualData : ISomeData {}
class SomeOtherData : ISomeData {}

interface ISomeInterface
{
    void DoSomething(ISomeData data);
}

class SomeImplementation : ISomeInterface
{
    public void DoSomething(ISomeData data)
    {
        dynamic specificData = data;
        HandleThis( specificData );
    }
    private void HandleThis(SomeActualData data)
    { /* ... */ }
    private void HandleThis(SomeOtherData data)
    { /* ... */ }

}

Вам просто нужно уловить исключение Runtime и обработать, как вы хотите, если у вас нет перегруженного метода, который принимает конкретный тип.

Ответ 3

Как описано в здесь, динамика может упростить использование слабо разработанных внешних библиотек: Microsoft предоставляет пример Microsoft.Office.Interop.Excel. И с динамикой вы можете избежать много раздражающего явного приведения в действие при использовании этой сборки.

Кроме того, в отличие от @user2415376, это определенно не способ обрабатывать интерфейсы, так как мы уже имеем Полиморфизм, реализованный с первых дней существования языка!
Вы можете использовать

  ISomeData specificData = data;

вместо

dynamic specificData = data;

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

Ответ 4

Проверьте это сообщение в блоге, в котором говорится о динамических ключевых словах в С#: https://cloudncode.blog/2016/07/12/c-dynamic-keyword-what-why-when/

Вот суть: Динамическое ключевое слово действительно мощное, оно незаменимо при использовании с динамическими языками, но может также использоваться для сложных ситуаций при разработке кода, где статически типизированный объект просто не будет делать.

Рассмотрим недостатки: 1. Нет проверки типа компиляции, это означает, что, если у вас нет 100% -ной уверенности в ваших модульных тестах (кашель), вы рискуете.

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

  2. Общие ошибки включают возвращение анонимных типов, завернутых в ключевое слово dynamic в общедоступных методах. Анонимные типы специфичны для сборки, возвращая их через сборку (через общедоступные методы), выдаст ошибку, хотя простое тестирование поймает это, теперь у вас есть общедоступный метод, который можно использовать только из определенных мест, и это просто плохой дизайн.

  3. Слишком крутой склон, неопытные разработчики жаждут написать что-то новое и стараться избегать большего количества классов (это не обязательно ограничивается неопытным) начнут использовать динамику все больше и больше, если они видят ее в коде, обычно я бы делал проверку анализа кода для динамического/добавлял его в обзор кода.

Ответ 5

Это определенно плохая идея использовать динамику во всех случаях, где ее можно использовать. Это связано с тем, что ваши программы потеряют преимущества проверки времени компиляции, и они также будут намного медленнее.

Ответ 6

Я хотел бы скопировать выдержку из сообщения проекта кода, которые определяют, что:

Зачем использовать динамический?

В статически типизированном мире динамика дает разработчикам много веревки чтобы повесить себя. При работе с объектами, типы которых могут быть известно во время компиляции, вам следует избегать ключевого слова dynamic расходы. Ранее я сказал, что моя первоначальная реакция была отрицательной, поэтому изменило мое решение? По словам Маргрет Этвуд, контекст - это все. когда статическая типизация, динамика не создает никакого смысла. Если ты имея дело с неизвестным или динамическим типом, часто необходимо общайтесь с ним через Reflection. Светоотражающий код непросто читать, и имеет все ловушки динамического типа выше. В этом контекст, динамика имеет большой смысл. [Подробнее]

В то время как некоторые из характеристик ключевого слова Dynamic:

  • Динамически типизированный. Это означает, что тип объявленной переменной решен компилятором во время выполнения.
  • Не нужно инициализировать во время объявления.

например.

dynamic str; 

str="I am a string"; //Works fine and compiles

str=2; //Works fine and compiles
  1. Ошибки попадают во время выполнения

  2. Intellisense недоступен, так как тип и связанные с ним методы и свойства могут быть известны только во время выполнения. [https://www.codeproject.com/Tips/460614/Difference-between-var-and-dynamic-in-Csharp]