← Все вопросы

Что такое dynamic в C# и чем он отличается от var?

Задан 9 месяцев назад776 просмотров2 ответа
7

Встретил в коде dynamic. Думал, это то же, что var, но компилятор ведёт себя по-другому. В чём подвох?

var x = 10;
dynamic y = 10;

2 ответа

14
✓ Принятый ответ — помог автору

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

  • var — это статическая типизация. Тип выводится компилятором на этапе компиляции и дальше неизменен. var x = 10; — это ровно int x = 10;.
  • dynamic — обход проверок типов. Все операции с ним резолвятся в рантайме через DLR (Dynamic Language Runtime).
var a = 10;
// a.Foo();   // ОШИБКА КОМПИЛЯЦИИ — у int нет Foo

dynamic b = 10;
b.Foo();      // компилируется! но упадёт RuntimeBinderException в рантайме

Из-за позднего связывания dynamic медленнее и теряет IntelliSense. Используйте его точечно: работа с COM, JSON без модели, рефлексия. В обычном коде — var или явный тип.

5

Коротко: var — это «компилятор, выведи тип сам». dynamic — это «компилятор, не проверяй ничего, разберёмся в рантайме».

С dynamic легко получить RuntimeBinderException там, где var/явный тип поймали бы ошибку ещё при сборке. Поэтому злоупотреблять не стоит.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект