динамический vs var в C# [дубликат]
Возможные Дубликаты:
в чем разница между dynamic(C# 4) и var?
в чем разница между ключевым словом dynamic и var в .NET 4.0 (VS 2010). Согласно MSDN, определение динамического -динамический поиск позволяет записывать вызовы метода, оператора и индексатора, доступ к свойствам и полям и даже вызовы объектов, которые обходят обычную статическую привязку C# и вместо этого разрешаются динамически.
тогда как определение для var -неявно типизированная локальная переменная строго типизирована так же, как если бы вы сами объявили тип, но компилятор определяет тип.
Как это отличается в контексте кода ниже:
var a1 = new A();
a1.Foo(1);
dynamic a2 = new A();
a2.Foo(1);
3 ответа:
var
означает статический тип выводится - в вашем случае это точно эквивалентноA a1 = new A();
все привязки по-прежнему делается полностью статически. Если вы посмотрите на сгенерированный код, он будет точно таким же, как и в приведенном выше объявлении.
dynamic
означает, что все любое выражение с помощьюa2
- это неизбежно во время выполнения, а не во время компиляции, поэтому он может вести себя динамично. Компилятор не будет проверять, является лиFoo
метод существует-поведение определяется во время выполнения. Действительно, если объект реализуетIDynamicMetaObjectProvider
он может решить, что делать с вызовом во время выполнения, отвечая на любой вызов метода (или другой вид использования) - другими словами, не должно быть "реального" метода под названиемFoo
на всех.если вы посмотрите на сгенерированный код в динамической ситуации, вы найдете все виды странных и замечательных вещей, чтобы сделать с Call-сайты и связующее вещество.