Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 31087|Svar: 0

[Källa] C# Anonym Typinlärningsdagbok

[Kopiera länk]
Publicerad på 2020-10-16 17:41:04 | | | |
När vi inte vill definiera komplexa klasser som komplexa metoder, händelser och konstruktorer kan vi dynamiskt generera en anpassad datatyp -> anonym typ.

1. Definiera typen av anonymitet

När du definierar en anonym typ behöver du använda nyckelordet var och objektinitieringssyntaxen.

var: Kompilatorn genererar automatiskt en ny klassdefinition vid kompileringstillfället (vi kan inte se namnet på klassen i C#-koden).

Initiering: Den kommer att be kompilatorn skapa privata bakgrundsfält och (skrivskyddade) egenskaper för den nyskapade typen.

Konstruera en anonym typ genom att skicka parametrar och skriv ut relevant information



Anrop: Anonyma typer kan också byggas med hårdkod



2. Intern representation av anonyma typer

Alla anonyma typer ärver automatiskt från objektet, så vi kan använda ToString, GetHashCode, Equals på bilobjektet, låt oss försöka anropa detta:



Samtal och resultat:







Typen på bilobjektet är: <>f__AnonymousType03 (ditt kan vara annorlunda), det anonyma typnamnet känns av kompilatorn, vi kan inte störa, CIL-kod.

3. Implementering av metoderna ToString() och GetHashCode().

1.ToString()



2.GetHashCode()

Den använder variabeln för varje anonym typ för att beräkna hashvärdet som typindata för System.Collections.Generic.EqualityComparer, och <T>producerar bara samma hashvärde om de två anonyma typerna har samma egenskaper och ges samma värde.

4. Lika semantik för anonyma typer

Equals()





Analysera resultaten:

1. Equals(): Kompilatorn åsidosätter Equals() för att avgöra att objekten är lika baserat på värdesemantik (t.ex. noterar värdet på varje datamedlem i två objekt)

2. == Operatorer: Eftersom anonyma typer inte överbelastar ekvivalenta operatorer (== , !=), == jämför referenser, inte innehåll.

3. GetType(): För om vi deklarerar två identiska (med samma attribut) anonyma typer i samma assembler, kommer kompilatorn endast att generera en definition av en anonym typ.

5. Anonyma typer som innehåller anonyma typer



Sammanfattning:

Faktum är att vi bör vara försiktiga med att använda anonyma typer, särskilt när vi använder LINQ, och aldrig ge upp att använda starkt typade klasser eller strukturer på grund av framväxten av anonyma typer.

Faktum är att den anonyma typen i sig har många begränsningar:

  • Du kontrollerar inte namnet på den anonyma typen
  • Anonyma typer ärver System.Objekt
  • Anonyma typer av fält och attribut är alltid skrivskyddade
  • Anonyma typer stöder inte händelser, anpassade metoder, anpassade operatorer och anpassade omskrivningar
  • Anonyma typer är implicit förseglade
  • Entitetskapande av anonyma typer använder endast standardkonstruktören


Om vi snabbt behöver definiera formen på en entitet utan att definiera dess funktion kan vi använda den anonyma typen.




Föregående:SQL Server-data exporteras som ett infogningsskript
Nästa:.net/C# speglar icke-anonyma funktioner &lt;&gt;f__AnonymousType0 metoder
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com