Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 31087|Відповідь: 0

[Джерело] C# Анонімний щоденник навчання типу

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

1. Визначити тип анонімності

При визначенні анонімного типу потрібно використовувати синтаксис ініціалізації ключових слів var та об'єкта.

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

Ініціалізація: Вона вкаже компілятору створити приватні фонові поля та властивості (лише для читання) для новоствореного типу.

Створіть анонімний тип, передаючи параметри, і друкуйте відповідну інформацію



Виклик: Анонімні типи також можна створювати за допомогою жорсткого коду



2. Внутрішнє представлення анонімних типів

Всі анонімні типи автоматично успадковують від Object, тому ми можемо використовувати 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