Когда нужно использовать динамическое ключевое слово в С# 4.0?....... Хороший пример с динамическим ключевым словом в С# 4.0, который объясняет его использование....
Когда следует использовать динамическое ключевое слово в С# 4.0?
Ответ 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% -ной уверенности в ваших модульных тестах (кашель), вы рискуете.
-
Динамическое ключевое слово использует больше циклов процессора, чем ваш старомодный статически типизированный код из-за дополнительных накладных расходов во время выполнения, если производительность важна для вашего проекта (обычно это), не использует динамический.
-
Общие ошибки включают возвращение анонимных типов, завернутых в ключевое слово dynamic в общедоступных методах. Анонимные типы специфичны для сборки, возвращая их через сборку (через общедоступные методы), выдаст ошибку, хотя простое тестирование поймает это, теперь у вас есть общедоступный метод, который можно использовать только из определенных мест, и это просто плохой дизайн.
-
Слишком крутой склон, неопытные разработчики жаждут написать что-то новое и стараться избегать большего количества классов (это не обязательно ограничивается неопытным) начнут использовать динамику все больше и больше, если они видят ее в коде, обычно я бы делал проверку анализа кода для динамического/добавлял его в обзор кода.
Ответ 5
Это определенно плохая идея использовать динамику во всех случаях, где ее можно использовать. Это связано с тем, что ваши программы потеряют преимущества проверки времени компиляции, и они также будут намного медленнее.
Ответ 6
Я хотел бы скопировать выдержку из сообщения проекта кода, которые определяют, что:
Зачем использовать динамический?
В статически типизированном мире динамика дает разработчикам много веревки чтобы повесить себя. При работе с объектами, типы которых могут быть известно во время компиляции, вам следует избегать ключевого слова dynamic расходы. Ранее я сказал, что моя первоначальная реакция была отрицательной, поэтому изменило мое решение? По словам Маргрет Этвуд, контекст - это все. когда статическая типизация, динамика не создает никакого смысла. Если ты имея дело с неизвестным или динамическим типом, часто необходимо общайтесь с ним через Reflection. Светоотражающий код непросто читать, и имеет все ловушки динамического типа выше. В этом контекст, динамика имеет большой смысл. [Подробнее]
В то время как некоторые из характеристик ключевого слова Dynamic:
- Динамически типизированный. Это означает, что тип объявленной переменной решен компилятором во время выполнения.
- Не нужно инициализировать во время объявления.
например.
dynamic str;
str="I am a string"; //Works fine and compiles
str=2; //Works fine and compiles
-
Ошибки попадают во время выполнения
-
Intellisense недоступен, так как тип и связанные с ним методы и свойства могут быть известны только во время выполнения. [https://www.codeproject.com/Tips/460614/Difference-between-var-and-dynamic-in-Csharp]