← Все вопросы
Что такое dynamic в C# и чем он отличается от var?
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/явный тип поймали бы ошибку ещё при сборке. Поэтому злоупотреблять не стоит.
Ваш ответ
Войдите, чтобы ответить на вопрос.