Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 31087|Svar: 0

[Kilde] C# Anonym Type Læringsdagbog

[Kopier link]
Opslået på 16/10/2020 17.41.04 | | | |
Når vi ikke ønsker at definere komplekse klasser som komplekse metoder, begivenheder og konstruktører, kan vi dynamisk generere en brugerdefineret datatype -> anonym type.

1. Definér typen af anonymitet

Når du definerer en anonym type, skal du bruge var-nøgleordet og objektinitialiseringssyntaksen.

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

Initialisering: Den vil fortælle compileren at oprette private baggrundsfelter og (skrivebeskyttede) egenskaber for den nyoprettede type.

Konstruer en anonym type ved at sende parametre og udskriv de relevante oplysninger



Kald: Anonyme typer kan også bygges ved hjælp af hardcode



2. Intern repræsentation af anonyme typer

Alle anonyme typer arver automatisk fra objektet, så vi kan bruge ToString, GetHashCode, Equals på bilobjektet, lad os prøve at kalde dette:



Opkald og resultater:







Typen af bilobjektet er: <>f__AnonymousType03 (din kan være anderledes), det anonyme typenavn mærkes af compileren, vi kan ikke blande os, CIL-kode.

3. Implementering af metoderne ToString() og GetHashCode().

1.ToString()



2.GetHashCode()

Den bruger variablen for hver anonym type til at beregne hashværdien som typeinput for System.Collections.Generic.EqualityComparer, og <T>producerer kun den samme hashværdi, hvis de to anonyme typer har de samme egenskaber og får samme værdi.

4. Lige semantik for anonyme typer

Lige()





Analyser resultaterne:

1. Equals(): Compileren overskriver Equals() for at afgøre, at objekter er lige baseret på værdisemantik (f.eks. noterer værdien af hvert datamedlem i to objekter)

2. == Operatorer: Fordi anonyme typer ikke overbelaster ækvivalente operatorer (== , !=), == sammenligner referencer, ikke indhold.

3. GetType(): Fordi hvis vi erklærer to identiske (med de samme attributter) anonyme typer i samme assembly, vil compileren kun generere en definition af én anonym type.

5. Anonyme typer, der indeholder anonyme typer



Resumé:

Faktisk bør vi være forsigtige med at bruge anonyme typer, især når vi bruger LINQ, og aldrig opgive at bruge stærkt typede klasser eller strukturer på grund af fremkomsten af anonyme typer.

Faktisk har den anonyme type mange begrænsninger:

  • Du kontrollerer ikke navnet på den anonyme type
  • Anonyme typer arver System.Objekt
  • Anonyme typer af felter og attributter er altid skrivebeskyttede
  • Anonyme typer understøtter ikke events, brugerdefinerede metoder, brugerdefinerede operatører og brugerdefinerede omskrivninger
  • Anonyme typer er implicit forseglede
  • Entitetsoprettelse af anonyme typer bruger kun standardkonstruktøren


Hvis vi hurtigt skal definere formen af en enhed uden at definere dens funktion, kan vi bruge den anonyme type.




Tidligere:SQL Server-data eksporteres som et indsættelsesscript
Næste:.net/C# afspejler ikke-anonyme funktioner &lt;&gt;f__AnonymousType0 metoder
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com