Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 31087|Ответ: 0

[Источник] C# Анонимный дневник обучения

[Скопировать ссылку]
Опубликовано 16.10.2020 17:41:04 | | | |
Когда мы не хотим определять сложные классы, такие как сложные методы, события и конструкторы, мы можем динамически генерировать пользовательский тип данных -> анонимный.

1. Определите тип анонимности

При определении анонимного типа необходимо использовать синтаксис ключевого слова var и инициализации объекта.

var: Компилятор автоматически генерирует новое определение класса во время компиляции (мы не видим название класса в коде на C#).

Инициализация: Компилятору нужно создать приватные фоновые поля и свойства только для чтения для нового типа.

Постройте анонимный тип, передавая параметры, и печатайте соответствующую информацию



Вызов: Анонимные типы также можно создавать с использованием жёсткого кода



2. Внутреннее представление анонимных типов

Все анонимные типы автоматически наследуют от объекта, поэтому мы можем использовать ToString, GetHashCode, Equals на объекте car, давайте попробуем вызвать это:



Звонки и результаты:







Тип объекта автомобиля: <>f__AnonymousType03 (ваш может отличаться), анонимное имя типа воспринимается компилятором, мы не можем вмешиваться, код CIL.

3. Реализация методов ToString() и GetHashCode().

1.ToString()



2.GetHashCode()

Он использует переменную каждого анонимного типа для вычисления хеш-значения в качестве входного типа в System.Collections.Generric.EqualityComparer и <T>производит одинаковое хеш-значение только если оба анонимных типа обладают одинаковыми свойствами и имеют одинаковое значение.

4. Равная семантика анонимных типов

Равны()





Проанализируйте результаты:

1. Equals(): Компилятор переопределяет Equals(), чтобы определить, что объекты равны на основе семантики стоимости (например, отмечает значение каждого элемента данных двух объектов)

2. == Операторы: Поскольку анонимные типы не перегружают эквивалентные операторы (== , !=), == сравнивает ссылки, а не содержимое.

3. GetType(): Потому что если мы объявим два идентичных (с одинаковыми атрибутами) анонимных типов в одном ассемблере, компилятор сгенерирует определение только одного анонимного типа.

5. Анонимные типы, содержащие анонимные типы



Сводка:

На самом деле, нам следует быть осторожными при использовании анонимных типов, особенно при использовании LINQ, и никогда не отказываться от использования сильно типизированных классов или структур из-за появления анонимных типов.

На самом деле, сам анонимный тип имеет множество ограничений:

  • Ты не контролируешь имя анонимного типа
  • Анонимные типы наследует System.Object
  • Анонимные типы полей и атрибутов всегда доступны только для чтения
  • Анонимные типы не поддерживают события, пользовательские методы, пользовательские операторы и кастомные переписывания
  • Анонимные типы неявно запечатаны
  • Создание сущностей анонимных типов использует только стандартный конструктор


Если нужно быстро определить форму сущности без определения её функции, можно использовать анонимный тип.




Предыдущий:Данные SQL Server экспортируются в виде скрипта вставки
Следующий:.net/C# отражает неанонимные функции &lt;&gt;f__AnonymousType0 методы
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com