Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 31087|Отговор: 0

[Източник] C# Анонимен учебен дневник

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

1. Дефинирайте вида анонимност

При дефиниране на анонимен тип трябва да използвате var ключовата дума и синтаксиса за инициализация на обекти.

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

Инициализация: Ще каже на компилатора да създаде частни фонови полета и (само за четене) свойства за новосъздадения тип.

Конструирайте анонимен тип чрез предаване на параметри и отпечатане на съответната информация



Call: Анонимни типове също могат да се създават с хардкод



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