Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 31087|Răspunde: 0

[Sursă] Jurnal de învățare de tip anonim C#

[Copiază linkul]
Postat pe 16.10.2020 17:41:04 | | | |
Când nu vrem să definim clase complexe precum metode complexe, evenimente și constructori, putem genera dinamic un tip de date personalizat -> tip anonim.

1. Definiți tipul de anonimat

Când definești un tip anonim, trebuie să folosești cuvântul cheie var și sintaxa inițializării obiectelor.

var: Compilatorul generează automat o nouă definiție a clasei în timpul compilației (nu putem vedea numele clasei în codul C#).

Inițializare: Va spune compilatorului să creeze câmpuri private de fundal și proprietăți (doar pentru citire) pentru tipul nou creat.

Construiește un tip anonim prin trecerea parametrilor și tipărește informațiile relevante



Apel: Tipurile anonime pot fi, de asemenea, construite folosind hardcode



2. Reprezentarea internă a tipurilor anonime

Toate tipurile anonime moștenesc automat de la Object, așa că putem folosi ToString, GetHashCode, Equals pe obiectul car, hai să încercăm să numim asta:



Decizii și rezultate:







Tipul obiectului mașinii este: <>f__AnonymousType03 (al tău poate fi diferit), numele anonim al tipului este simțit de compilator, nu putem interveni, cod CIL.

3. Implementarea metodelor ToString() și GetHashCode().

1.ToString()



2.GetHashCode()

Folosește variabila fiecărui tip anonim pentru a calcula valoarea hash ca intrare de tip a System.Collections.Generic.EqualityComparer și <T>produce aceeași valoare hash doar dacă cele două tipuri anonime au aceleași proprietăți și primesc aceeași valoare.

4. Semantica egală a tipurilor anonime

Egal()





Analizează rezultatele:

1. Egal(): Compilatorul suprascrie Egal() pentru a determina dacă obiectele sunt egale pe baza semanticii valorii (de exemplu, notează valoarea fiecărui membru de date a două obiecte)

2. == Operatori: Pentru că tipurile anonime nu suprasolicită operatorii echivalent (== , !=), == compară referințele, nu conținutul.

3. GetType(): Pentru că dacă declarăm două tipuri anonime identice (cu aceleași atribute) în aceeași asamblare, compilatorul va genera doar o definiție a unui singur tip anonim.

5. Tipuri anonime care conțin tipuri anonime



Rezumat:

De fapt, ar trebui să fim precauți în utilizarea tipurilor anonime, mai ales când folosim LINQ, și să nu renunțăm niciodată la utilizarea claselor sau structurilor puternic tipizate din cauza apariției tipurilor anonime.

De fapt, tipul anonim are multe limitări:

  • Nu controlezi numele tipului anonim
  • Tipurile anonime moștenesc System.Object
  • Tipurile anonime de câmpuri și atribute sunt întotdeauna doar citire
  • Tipurile anonime nu suportă evenimente, metode personalizate, operatori personalizați și rescrieri personalizate
  • Tipurile anonime sunt sigilate implicit
  • Crearea entității de tipuri anonime folosește doar constructorul implicit


Dacă trebuie să definim rapid forma unei entități fără a-i defini funcția, putem folosi tipul anonim.




Precedent:Datele SQL Server sunt exportate ca un script de inserare
Următor:.net/C# reflectă funcții &lt;&gt;f__AnonymousType0 metode non-anonime
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com