架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотров:17295|Ответов: 0
打印 上一主题 下一主题

[C# Анонимный тип (Анонимный тип) Дневник обучения

[копировать ссылку]
Подъемник прямо к 跳转到指定楼层
владелец здания
发表于 2020-10-16 17:41:04|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
Когда мы не хотим определять сложные методы, события, конструкторы и другие сложные классы, мы можем динамически генерировать пользовательский тип данных --> анонимный тип.

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

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

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

Инициализация: она укажет компилятору создать приватные поля бэкэнда и атрибуты (только для чтения) для вновь созданного типа.

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



Вызов: вы также можете создавать анонимные типы, используя жестко закодированные



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

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



Вызов и результат:







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

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

1. ToString ()



2. GetHashCode()

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

4. Семантика Equals для анонимных типов

Equals()





Проанализируйте результат следующим образом:

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

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

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

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



Резюме:

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

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


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


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




Предыдущая: sql server data export as insert script
Следующая: .net/c# отразить неанонимную функцию &lt;&gt;f__AnonymousType0 метод
Код фермерской сети, публикуется только по ходу практики, возникли технические трудности, не вводите в заблуждение других.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


DISCLAIMER: Все программное обеспечение, материалы по программированию или статьи, опубликованные Code Farmer, предназначены только для использования в учебных и исследовательских целях; вышеуказанное содержимое не должно использоваться в коммерческих или незаконных целях, в противном случае все последствия будут возложены на самих пользователей. Это сайт информации из сети, спор об авторских правах не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое со своего компьютера в течение 24 часов после загрузки. Если вам понравилась программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшее подлинное обслуживание. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 17:18

Быстрый ответНазад к началуНазад к списку