Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 31087|Svare: 0

[Kilde] C# Anonym Type Læringsdagbok

[Kopier lenke]
Publisert på 16.10.2020 17:41:04 | | | |
Når vi ikke ønsker å definere komplekse klasser som komplekse metoder, hendelser og konstruktører, kan vi dynamisk generere en egendefinert datatype -> anonym type.

1. Definer typen anonymitet

Når du definerer en anonym type, må du bruke var-nøkkelordet og objektinitialiseringssyntaksen.

var: Kompilatoren genererer automatisk en ny klassedefinisjon ved kompilering (vi kan ikke se navnet på klassen i C#-koden).

Initialisering: Den vil fortelle kompilatoren å opprette private bakgrunnsfelt og (skrivebeskyttet) egenskaper for den nyopprettede typen.

Konstruer en anonym type ved å sende parametere og skriv ut relevant informasjon



Kall: Anonyme typer kan også bygges ved hjelp av hardkode



2. Intern representasjon av anonyme typer

Alle anonyme typer arver automatisk fra objektet, så vi kan bruke ToString, GetHashCode, Equals på bilobjektet, la oss prøve å kalle dette:



Samtaler og resultater:







Typen på bilobjektet er: <>f__AnonymousType03 (din kan være annerledes), det anonyme typenavnet føles av kompilatoren, vi kan ikke blande oss inn, CIL-kode.

3. Implementering av metodene ToString() og GetHashCode().

1.ToString()



2.GetHashCode()

Den bruker variabelen til hver anonym type for å beregne hashverdien som typeinput for System.Collections.Generic.EqualityComparer, og <T>produserer bare samme hashverdi hvis de to anonyme typene har samme egenskaper og får samme verdi.

4. Lik semantikk for anonyme typer

Like()





Analyser resultatene:

1. Equals(): Kompilatoren overstyrer Equals() for å avgjøre at objektene er like basert på verdisemantikk (f.eks. noterer verdien til hvert datamedlem i to objekter)

2. == Operatorer: Fordi anonyme typer ikke overbelaster ekvivalente operatorer (== , !=), == sammenligner referanser, ikke innhold.

3. GetType(): Fordi hvis vi erklærer to identiske (med samme attributter) anonyme typer i samme assembly, vil kompilatoren bare generere en definisjon av én anonym type.

5. Anonyme typer som inneholder anonyme typer



Sammendrag:

Faktisk bør vi være forsiktige med å bruke anonyme typer, spesielt når vi bruker LINQ, og aldri gi opp å bruke sterkt typede klasser eller strukturer på grunn av fremveksten av anonyme typer.

Faktisk har den anonyme typen mange begrensninger:

  • Du kontrollerer ikke navnet på den anonyme typen
  • Anonyme typer arver System.Objekt
  • Anonyme typer felt og attributter er alltid skrivebeskyttet
  • Anonyme typer støtter ikke hendelser, egendefinerte metoder, egendefinerte operatører og egendefinerte omskrivinger
  • Anonyme typer er implisitt forseglet
  • Entitetsopprettelse av anonyme typer bruker kun standardkonstruktøren


Hvis vi raskt må definere formen til en enhet uten å definere funksjonen, kan vi bruke den anonyme typen.




Foregående:SQL Server-data eksporteres som et innsettingsskript
Neste:.net/C# reflekterer ikke-anonyme funksjoner &lt;&gt;f__AnonymousType0 metoder
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com