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

Динамический тип объекта

Я использовал динамический и тип объекта взаимозаменяемо. Есть ли разница между этими двумя типами? Есть ли какие-либо последствия для использования одного над другим? Какой из них более гибкий?

4b9b3361

Ответ 1

Они сильно отличаются.

Если вы используете dynamic, вы выбираете динамическую типизацию и, таким образом, отказываетесь от проверки времени компиляции по большей части. И да, это менее результативно, чем использование статической типизации, где вы можете использовать статическую типизацию.

Тем не менее, вы не можете много сделать с типом object - у него почти нет членов. Где вы его используете? Если вы хотите написать код общего назначения, который может работать с различными типами, вы обычно должны рассматривать общие элементы, а не object.

Ответ 2

С продвижением на языке С# мы видим, что даже тип var сопоставим с типами динамических и объектов. Вот все три типа, которые я узнал, сравнивая эти 7 пунктов:

Объект

  • Объект был введен с С# 1.0.
  • Он может хранить любое значение, потому что объект является базовым классом всех типов в .NET framework.
  • У компилятора мало информации о типе.
  • Тип объекта может передаваться как аргумент метода, а метод также может возвращать тип объекта.
  • Необходимо использовать объектную переменную для исходного типа для ее использования и выполнения желаемых операций.
  • Причина проблемы во время выполнения, если сохраненное значение не преобразуется в базовый тип данных.
  • Полезно, если у нас нет дополнительной информации о типе данных.

Var

  • Var был введен с С# 3.0
  • Он может хранить любой тип значения, но обязательно необходимо инициализировать типы var во время объявления.
  • Это безопасный тип, т.е. компилятор имеет всю информацию о сохраненном значении, так что он не вызывает никаких проблем во время выполнения.
  • Тип Var не может передаваться как аргумент метода, и метод не может возвращать тип объекта. Работа типа Var в области, где она определена.
  • Не нужно бросать, потому что у компилятора есть вся информация для выполнения операций.
  • Не вызывает проблем, поскольку у компилятора есть вся информация о сохраненном значении.
  • Полезно, если мы не знаем фактический тип, т.е. тип анонимный.

Динамический

  • Динамический был введен с С# 4.0
  • Он может хранить любой тип переменной, подобно старой переменной языка VB.
  • Это не безопасный тип, т.е. у компилятора нет информации о типе переменной.
  • Динамический тип может передаваться как аргумент метода, а метод также может возвращать динамический тип.
  • Кастинг не требуется, но вам нужно знать свойства и методы, относящиеся к сохраненному типу.
  • При возникновении неправильных свойств или методов возникает проблема, потому что вся информация о сохраненном значении получает разрешение только во время выполнения.
  • Полезно, когда нам нужно кодировать с использованием отражения или динамических языков или с COM-объектами, потому что вам нужно писать меньше кода.

Надеюсь, это помогло бы кому-то.

Спасибо!