C# анонимный тип (анонимный тип) учебный дневник
- обувь jordan для продажи
- 16370
|
Когда мы не хотим определять сложные методы, события, конструкторы и другие сложные классы, мы можем динамически генерировать пользовательский тип данных --> анонимный тип.
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# отразить неанонимную функцию <>f__AnonymousType0 метод
|