Подтвердить что ты не робот

Динамическое ключевое слово vs тип данных объекта

Чем отличаются эти два определения переменных?

object oVar;
dynamic dVar;

Производительность? Выделение памяти? Преимущества?

4b9b3361

Ответ 1

Одна переменная набирается как object компилятором, и все члены экземпляра будут проверяться как действительные компилятором. Другая переменная набирается как dynamic, и все члены экземпляра будут проигнорированы компилятором и вызваны DLR во время выполнения.

Это не имеет никакого отношения ни к производительности, ни к распределению памяти. Тип dynamic - это статический тип, который компилятор несколько игнорирует. Это дает вам возможность использовать duck typing на статически типизированном языке, который обеспечивает большую гибкость (особенно при работе с компонентами, написанными на языках, которые более динамичный).

Я бы определенно рекомендовал вам прочитать по следующим темам:

Ответ 2

object действителен для всех версий .NET.

Это базовый тип, наследуемый всеми другими типами, поэтому любой тип может быть добавлен в object.

Вы не можете динамически добавлять и изменять что-либо в переменной, объявленной как object.

Объявление статически типизировано и проверяется компилятором.

dynamic является новым для .NET 4.0.

Он позволяет динамически добавлять и изменять свойства и методы без проверки их компилятором (поэтому, если вы написали не так, вы узнаете только во время выполнения).


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

Что касается производительности, поскольку DLR задействован с dynamic, то будут некоторые накладные расходы. Вам нужно будет протестировать и посмотреть.

Что касается других преимуществ - dynamic действительно помогает с читабельностью при работе с динамическими объектами/данными, например с XML файлами. Это также помогает с отражением аналогичным образом.

Конечно, если вы хотите иметь динамические объекты, вы не можете использовать object и использовать dynamic.

Ответ 3

Динамическое ключевое слово также добавляет некоторые накладные расходы к вашему времени выполнения из-за использования всей дополнительной логики - поэтому, если вам не нужна динамическая среда выполнения или взаимодействие, и вы можете избежать использования объекта, ваш код будет более эффективным.

Более подробную информацию о ключевом слове dynamic можно найти в книге Джеффа Рихтера: CLR через С#, 3rd Edition

Сэм Жантиль сделал несколько сообщений о деталях: