See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 31087|Vastuse: 0

[Allikas] C# Anonüümse tüübi õppepäevik

[Kopeeri link]
Postitatud 16.10.2020 17:41:04 | | | |
Kui me ei taha defineerida keerukaid klasse nagu kompleksmeetodid, sündmused ja konstruktorid, saame dünaamiliselt genereerida kohandatud andmetüübi -> anonüümse tüübi.

1. Määratle anonüümsuse tüüp

Anonüümse tüübi määratlemisel tuleb kasutada var märksõna ja objekti initsialiseerimissüntaksit.

var: kompilaator genereerib kompileerimise ajal automaatselt uue klassi definitsiooni (me ei näe klassi nime C# koodis).

Initsialiseerimine: See ütleb kompilaatorile, et ta looks uue tüübi jaoks privaatseid taustavälju ja (ainult lugemiseks) omadusi.

Koosta anonüümne tüüp, edastades parameetreid ja prindi asjakohane info



Call: Anonüümseid tüüpe saab ehitada ka kõvakoodiga



2. Anonüümsete tüüpide sisemine esindatus

Kõik anonüümsed tüübid pärivad automaatselt objektilt, seega saame kasutada ToStringi, GetHashCode'i, Equalsi auto objektil, proovime seda nimetada:



Kõned ja tulemused:







Auto objekti tüüp on: <>f__AnonymousType03 (sinu oma võib olla erinev), anonüümne tüübinimi on kompilaator poolt tunnetatud, me ei saa sekkuda, CIL kood.

3. Meetodite ToString() ja GetHashCode() rakendamine.

1.ToString()



2.GetHashCode()

See kasutab iga anonüümse tüübi muutujat, et arvutada räsi väärtus System.Collections.Generic.EqualityCompareri tüübi sisendina ning <T>annab sama räsi väärtuse ainult siis, kui kahel anonüümsel tüübil on samad omadused ja neile antakse sama väärtus.

4. Anonüümsete tüüpide võrdne semantika

Võrdub()





Analüüsi tulemusi:

1. Equals(): Kompilaator tühistab Equals() väärtuse, et määrata objektid võrdsed väärtuse semantika põhjal (nt märgib iga andmeliikme väärtust kahe objekti puhul)

2. == Operaatorid: Kuna anonüümsed tüübid ei koorma ekvivalentseid operaatoreid (== , !=), == võrdleb viiteid, mitte sisu.

3. GetType(): Sest kui deklareerime samas assamblees kaks identset (samade atribuutidega) anonüümset tüüpi, genereerib kompilaator ainult ühe anonüümse tüübi definitsiooni.

5. Anonüümsed tüübid, mis sisaldavad anonüümseid tüüpe



Kokkuvõte:

Tegelikult peaksime olema ettevaatlikud anonüümsete tüüpide kasutamisel, eriti LINQ kasutamisel, ning mitte kunagi loobuma tugevalt tüübistatud klasside või struktuuride kasutamisest anonüümsete tüüpide tekkimise tõttu.

Tegelikult on anonüümsel tüübil endal palju piiranguid:

  • Sa ei kontrolli anonüümse tüübi nime
  • Anonüümsed tüübid pärivad System.Object
  • Anonüümsed väljade ja atribuutide tüübid on alati ainult lugemiseks
  • Anonüümsed tüübid ei toeta sündmusi, kohandatud meetodeid, kohandatud operaatoreid ega kohandatud ümberkirjutusi
  • Anonüümsed tüübid on implitsiitselt suletud
  • Anonüümsete tüüpide entiteetide loomine kasutab ainult vaikimisi konstruktorit


Kui peame kiiresti määratlema üksuse kuju ilma selle funktsiooni määratlemata, saame kasutada anonüümset tüüpi.




Eelmine:SQL Serveri andmed eksporditakse insert-skriptina
Järgmine:.net/C# kajastab mitteanonüümseid funktsioone &lt;&gt;f__AnonymousType0 meetodeid
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com