Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 31087|Vastaus: 0

[Lähde] C# Anonyymi tyyppinen oppimispäiväkirja

[Kopioi linkki]
Julkaistu 16.10.2020 17.41.04 | | | |
Kun emme halua määritellä monimutkaisia luokkia kuten monimutkaisia metodeja, tapahtumia ja konstruktoreita, voimme dynaamisesti generoida mukautetun tietotyypin -> anonyymin tyypin.

1. Määrittele anonymiteetin tyyppi

Kun määrittelet anonyymin tyypin, sinun tulee käyttää var-avainsanaa ja objektin alustussyntaksia.

var: Kääntäjä generoi automaattisesti uuden luokkamääritelmän käännösvaiheessa (emme näe luokan nimeä C#-koodissa).

Alustus: Se käskee kääntäjää luomaan yksityisiä taustakenttiä ja (vain lukua) ominaisuuksia uudelle tyypille.

Rakenna anonyymi tyyppi välittämällä parametreja ja tulosta asiaankuuluva tieto



Kutsu: Anonyymit tyypit voidaan myös rakentaa kovakoodauksella



2. Anonyymien tyyppien sisäinen esitys

Kaikki anonyymit tyypit perivät automaattisesti Objectilta, joten voimme käyttää ToStringia, GetHashCodea, Equalsia auto-olioon, kokeillaan kutsua tätä:



Puhelut ja tulokset:







Auton objektin tyyppi on: <>f__AnonymousType03 (sinun tyyppisi voi olla erilainen), anonyymi tyyppinimi tunnetaan kääntäjässä, emme voi puuttua, CIL-koodi.

3. Metodien ToString() ja GetHashCode() toteutus.

1.ToString()



2.GetHashCode()

Se käyttää kunkin anonyymin tyypin muuttujaa laskemaan hajautusarvon System.Collections.Generic.EqualityComparerin tyypin syötteenä, ja <T>tuottaa saman hajautusarvon vain, jos kahdella anonyymillä tyypillä on samat ominaisuudet ja niille annetaan sama arvo.

4. Anonyymien tyyppien yhtäläiset semantiikka

Equals()





Analysoi tulokset:

1. Equals(): Kääntäjä ohittaa Equals():n määrittääkseen, että objektit ovat yhtä suuria arvosemantiikan perusteella (esim. huomioi kahden objektin jokaisen datajäsenen arvon)

2. == Operaattorit: Koska anonyymit tyypit eivät ylikuormita vastaavia operaattoreita (== , !=), == vertaa viittauksia, ei sisältöä.

3. GetType(): Koska jos julistamme samassa kokoonpanossa kaksi identtistä (samoilla attribuuteilla) anonyymit tyyppiä, kääntäjä tuottaa vain yhden anonyymin tyypin määritelmän.

5. Anonyymit tyypit, jotka sisältävät anonyymejä tyyppejä



Yhteenveto:

Itse asiassa meidän tulisi olla varovaisia anonyymien tyyppien käytössä, erityisesti LINQ:n käytössä, eikä koskaan luopua vahvasti tyypitettyjen luokkien tai rakenteiden käytöstä anonyymien tyyppien yleistymisen vuoksi.

Itse asiassa anonyymillä itsessään on monia rajoituksia:

  • Et hallitse anonyymin tyypin nimeä
  • Anonyymit tyypit perivät System.Objectin
  • Anonyymit kenttätyypit ja attribuutit ovat aina vain luku
  • Anonyymit tyypit eivät tue tapahtumia, mukautettuja metodeja, mukautettuja operaattoreita tai mukautettuja uudelleenkirjoituksia
  • Anonyymit tyypit ovat implisiittisesti suljettuja
  • Anonyymien tyyppien entiteettien luomisessa käytetään vain oletuskonstruktoria


Jos meidän täytyy nopeasti määritellä entiteetin muoto määrittelemättä sen funktiota, voimme käyttää anonyymityyppiä.




Edellinen:SQL Server -data viedään insert-skriptinä
Seuraava:.net/C# heijastaa ei-anonyymejä funktioita &lt;&gt;f__AnonymousType0 metodeja
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com