Динамический и анонимный тип?

224
22 апреля 2017, 21:28

Возвращаясь к моему вопросу заданному ранее: Приведение типа к dynamic и ответа данного на него, что привидени типов там никакого нет, и что левая часть примит занчеение правой - т.е на строке:

dynamic instance = new Program();

тип dynamic примет тип Program, то принимая это во внимание и то, что обычно для хранения анононимных типов используется тип var

var instance = new { Name = "Alex", Age = 27 };

Значит, если я использую анонимные и динамические типы в c#, т.е.:

dynamic instance = new { Name="Alex", Age = 27 };

то dynamic примет тип var исходя из выше написанного?

Answer 1

Вывод сделан неверно.

var - это НЕ тип (хотя да, в справке он указывается как implicit type). Тип выводится компилятором в момент компиляции.

В случае с анонимными типами: в момент компиляции они получают вполне конкретное имя. Поэтому во время компиляции строка

var instance = new { Name = "Alex", Age = 27 };

будет заменена на что-то вроде

<>f__AnonymousType0`2 instance = new <>f__AnonymousType0`2 { Name = "Alex", Age = 27 };

Следовательно и dynamic будет хранить этот созданный тип.

Answer 2

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

var instance = new { Name = "Alex", Age = 27 };
Console.WriteLine(instance.GetType());
dynamic dynamicInstance = new { Name = "Alex", Age = 27 };
Console.WriteLine(dynamicInstance.GetType());

Результат:

<>f__AnonymousType0`2[System.String,System.Int32]

<>f__AnonymousType0`2[System.String,System.Int32]

READ ALSO
OpenXML C# read .docx

OpenXML C# read .docx

Пытаюсь получить весь текст из документаdocx

323
Совместимость программ под Windows c Linux и Mac

Совместимость программ под Windows c Linux и Mac

Пишу программу на Windows Forms C# в которой используются хуки APIНа винде все работает конечно, но интересует вопрос о совместимости с другими ОС, будет...

279
Как в C# (WPF) выполнить метод спустя некоторое время после события?

Как в C# (WPF) выполнить метод спустя некоторое время после события?

В моем проекте на WPF, есть кнопка, на LeftMouseDown срабатывает событие, в котором спустя 3 секунды пока кнопка мыши зажата, выполнится метод (отправим...

400
Пример приложения WPF+MVVM+EF6

Пример приложения WPF+MVVM+EF6

ЗдравствуйтеНе могли бы вы мне показать небольшой пример кода приложения, сделанного на WPF (C#) согласно паттерну MVVM и следующим условиям:

258