Анонимные типы в c# и их особенности?
Формулировка задачи:
Всем привет. Начал изучать анонимные типы в c#.
Автор приводит пример синтаксиса Анонимного типа и предлагает последовательно - шаг за шагом добавить на эту строку дополнительные элементы синтаксиса - что бы данная строк стала более узнаваемая "читаемая" для нас (напоминаю- автор это делает т.к пример и весь курс - учебный) т.е превратив выше приведенную строку в - говоря, что мы добавили имя конструктора по умолчанию и круглые скобки для приема аргументов конструктора, и тут же демонстрируеь, что добавляя это - студия предлагает сгенерировать нам свойства для Age и для Name в классе MyClass(класс он создал сам-опять же для примера, но сказал, что в анонимных типах при генерации свойств класс такжн создаетс автоматически)
В классе сгенерировались авто-реализуемые свойства (см изображение 1)
- но автор сказал, что они должны быть только для чтения -т.е в (ну в данном случае посто нужно убрать set - ведь студия генерировала свойства как для обычных полей класса когда мы дописала имя конструктора по умолчаню после ключевого слова new) .
И это подводит меня к вопросу №3(вопросы №1 и 2 представлены ниже) Если авто генерируемые , авто-реализуемые свойства в также автоматически созданном классе(назовем его MyClass) -только для чтения, то каким образом в блоке инициализатора на строке - мы вообще можем присваивать этим полям значения ?
Вот скриншот первого примера, в котором меня интересует комментарий: - в котором у меня и возникают все эти вопросы.(см изображение 2)
вопрсос №1 т.е компилятор каждый раз создает новое имя для анонимного типа, который в свою очередь является ссылочным типом ?
вопрос№2 т.е приложение не может обращаться ссылке(т.к тип ссылочный) к новому имени созданному
Далее автор говорит, что компилятором.
Вопрос№3 - представлен вначале.
var instance=new{Name"Alex", Age=27};
var instance=new MyClass(){Name"Alex", Age=27};
var instance=new{Name"Alex", Age=27};
Решение задачи: «Анонимные типы в c# и их особенности?»
textual
Листинг программы
var type1_obj1 = new { X = 1, Y = "2" }; var type1_obj2 = new { X = 111, Y = "222" }; // type1_obj1 и type1_obj2 имеют одинаковый тип Console.WriteLine(type1_obj1.GetType() == type1_obj2.GetType()); var type2_obj1 = new { Y = "2", X = 1 }; // type1_obj1 и type2_obj1 имеют разный тип Console.WriteLine(type1_obj1.GetType() == type2_obj1.GetType()); var type3_obj1 = new { X = 1, Y = "2", Z = 3.3 }; // type1_obj1 и type3_obj1 тоже имеют разный тип Console.WriteLine(type1_obj1.GetType() == type3_obj1.GetType());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д