Анонимные типы в c# и их особенности?

Узнай цену своей работы

Формулировка задачи:

Всем привет. Начал изучать анонимные типы в c#. Автор приводит пример синтаксиса Анонимного типа
var instance=new{Name"Alex", Age=27};
и предлагает последовательно - шаг за шагом добавить на эту строку дополнительные элементы синтаксиса - что бы данная строк стала более узнаваемая "читаемая" для нас (напоминаю- автор это делает т.к пример и весь курс - учебный) т.е превратив выше приведенную строку в
var instance=new MyClass(){Name"Alex", Age=27};
- говоря, что мы добавили имя конструктора по умолчанию и круглые скобки для приема аргументов конструктора, и тут же демонстрируеь, что добавляя это - студия предлагает сгенерировать нам свойства для Age и для Name в классе MyClass(класс он создал сам-опять же для примера, но сказал, что в анонимных типах при генерации свойств класс такжн создаетс автоматически) В классе сгенерировались авто-реализуемые свойства (см изображение 1) - но автор сказал, что они должны быть только для чтения -т.е в (ну в данном случае посто нужно убрать set - ведь студия генерировала свойства как для обычных полей класса когда мы дописала имя конструктора по умолчаню после ключевого слова new) . И это подводит меня к вопросу №3(вопросы №1 и 2 представлены ниже) Если авто генерируемые , авто-реализуемые свойства в также автоматически созданном классе(назовем его MyClass) -только для чтения, то каким образом в блоке инициализатора на строке
var instance=new{Name"Alex", Age=27};
- мы вообще можем присваивать этим полям значения ? Вот скриншот первого примера, в котором меня интересует комментарий: - в котором у меня и возникают все эти вопросы.(см изображение 2) вопрсос №1 т.е компилятор каждый раз создает новое имя для анонимного типа, который в свою очередь является ссылочным типом ? вопрос№2 т.е приложение не может обращаться ссылке(т.к тип ссылочный) к новому имени созданному Далее автор говорит, что компилятором. Вопрос№3 - представлен вначале.

Решение задачи: «Анонимные типы в 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());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5