Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

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

#c_sharp


Возвращаясь к моему вопросу заданному ранее: Приведение типа к 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 исходя из выше написанного?
    


Ответы

Ответ 1



Вывод сделан неверно. var - это НЕ тип (хотя да, в справке он указывается как implicit type). Тип выводится компилятором в момент компиляции. В случае с анонимными типами: в момент компиляции они получают вполне конкретное имя. Поэтому во время компиляции строка var instance = new { Name = "Alex", Age = 27 }; будет заменена на что-то вроде <>f__AnonymousType0`2 instance = new <>f__AnonymousType0`2 { Name = "Alex", Age = 27 }; Следовательно и dynamic будет хранить этот созданный тип.

Ответ 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]

Комментариев нет:

Отправить комментарий