В чем разница между dynamic (C # 4) и var? - PullRequest
191 голосов
/ 07 июня 2009

Я прочитал тонну статей об этом новом ключевом слове, которое поставляется с C # v4, но я не мог понять разницу между "dynamic" и "var".

Эта статья заставила меня задуматься, но я все еще не вижу никакой разницы.

Возможно ли, что вы можете использовать "var" только как локальную переменную, но динамическую как локальную, так и глобальную?

Не могли бы вы показать код без динамического ключевого слова, а затем показать тот же код с динамическим ключевым словом?

Ответы [ 14 ]

2 голосов
/ 19 марта 2013
Динамическая переменная

и переменная var могут хранить значения любого типа, но это требуется для инициализации 'var' во время объявления.

Компилятор не имеет никакой информации о «динамическом» типе переменной. var безопасен для компилятора, т.е. компилятор имеет всю информацию о сохраненном значении, поэтому он не вызывает проблем во время выполнения.

Динамический тип может передаваться как аргумент функции, и функция также может возвращать его. Тип var не может быть передан в качестве аргумента функции, а функция не может возвращать тип объекта. Переменная этого типа может работать в области, где она определена.

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

dynamic: полезно при кодировании с использованием отражения или поддержки динамического языка или с объектами COM, потому что нам требуется писать меньше кода.

var: полезно при получении результата от запросов linq. В 3.5 Framework он вводит для поддержки функции linq.

Ссылка: Консультациябабхи

1 голос
/ 06 сентября 2013

Вот различия

  • тип статически типизирован (время компиляции), динамически типизирован динамически (время выполнения)

  • Переменная, объявленная как var, может использоваться только локально, динамически переменные могут быть переданы как параметры функции (сигнатура функции можно определить параметр как динамический, но не переменный).

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

  • Приведение типов с использованием var невозможно, но возможно с использованием динамического (объект можно приводить как динамический, но не как var).

Арун Виджайрагхаван

1 голос
/ 29 марта 2013
  1. Ключевое слово Var (неявная типизированная локальная переменная) используется для определения локальных переменных. В случае Var базовый тип данных определяется во время компиляции на основе начального присваивания. Как только начальное присваивание было выполнено с типом Var , тогда он станет строго типизированным. Если вы попытаетесь сохранить любое несовместимое значение с типом Var, это приведет к ошибке времени компиляции.

Пример:

Var strNameList=new List<string>(); By using this statement we can store list of names in the string format. 
strNameList.add("Senthil");
strNameList.add("Vignesh");

strNameList.add(45); // This statement will cause the compile time error.

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

Пример:

dynamic test="Senthil";
Console.Writeline(test.GetType())  // System.String

test=1222;
Console.Writeline(test.GetType())  // System.Int32

test=new List<string>();
Console.Writeline(test.GetType())  //System.Collections.Generic.List'1[System.String]

Он также не обеспечивает поддержку IntelliSense. Он не дает лучшей поддержки, когда мы также работаем с linq. Потому что он не поддерживает лямбда-выражения, методы расширения и анонимные методы.

1 голос
/ 24 июня 2011

Не путайте динамические и вар. Объявление локальной переменной с использованием var - это всего лишь синтаксический ярлык, в котором компилятор выводит определенный тип данных из выражения. Ключевое слово var может использоваться только для объявления локальных переменных внутри метода, в то время как динамическое ключевое слово может использоваться для локальных переменных, полей и аргументов. Вы не можете преобразовать выражение в var, но вы можете преобразовать выражение в динамическое. Вы должны явно инициализировать переменную, объявленную с использованием var, в то время как вам не нужно инициализировать переменную, объявленную с помощью dynamic.

...