Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 31087|Antwoord: 0

[Bron] C# Anonieme Type Leerdagboek

[Link kopiëren]
Geplaatst op 16-10-2020 17:41:04 | | | |
Wanneer we complexe klassen zoals complexe methoden, events en constructors niet willen definiëren, kunnen we dynamisch een aangepast datatype -> anoniem type genereren.

1. Definieer het type anonimiteit

Bij het definiëren van een anoniem type moet je het var-sleutelwoord en de syntaxis van objectinitialisatie gebruiken.

var: De compiler genereert automatisch een nieuwe klassedefinitie bij het compileren (we kunnen de naam van de klasse niet zien in de C#-code).

Initialisatie: Het zal de compiler vertellen om privé-achtergrondvelden en (alleen-lezen) eigenschappen te maken voor het nieuw aangemaakte type.

Bouw een anonieme type door parameters door te geven en print de relevante informatie af



Call: Anonieme types kunnen ook worden gebouwd met hardcode



2. Interne representatie van anonieme types

Alle anonieme types erven automatisch van Object, dus we kunnen ToString, GetHashCode, Equals gebruiken op het autoobject, laten we proberen dit aan te roepen:



Oproepen en resultaten:







Het type autoobject is: <>f__AnonymousType03 (die van jou kan anders zijn), de anonieme typenaam wordt gevoeld door de compiler, we kunnen niet ingrijpen, CIL-code.

3. Implementatie van methoden ToString() en GetHashCode().

1.ToString()



2.GetHashCode()

Het gebruikt de variabele van elk anoniem type om de hashwaarde te berekenen als de type-invoer van System.Collections.Generic.EqualityComparer, en <T>produceert alleen dezelfde hashwaarde als de twee anonieme types dezelfde eigenschappen hebben en dezelfde waarde krijgen.

4. Gelijke semantiek van anonieme typen

Gelijk()





Analyseer de resultaten:

1. Equals(): De compiler overschrijft Equals() om te bepalen dat objecten gelijk zijn op basis van waardesemantiek (bijvoorbeeld merkt hij de waarde van elk datalid van twee objecten op)

2. == Operatoren: Omdat anonieme types equivalente operatoren niet overbelasten (== , !=), == vergelijkt referenties, niet inhoud.

3. GetType(): Omdat als we twee identieke (met dezelfde attributen) anonieme types in dezelfde assembly declareren, de compiler slechts een definitie van één anoniem type genereert.

5. Anonieme types die anonieme types bevatten



Samenvatting:

Sterker nog, we moeten voorzichtig zijn met het gebruik van anonieme types, vooral bij LINQ, en nooit stoppen met het gebruik van sterk getypeerde klassen of structuren vanwege het ontstaan van anonieme types.

In feite heeft het anonieme type zelf veel beperkingen:

  • Je hebt geen controle over de naam van het anonieme type
  • Anonieme types erven System.Object
  • Anonieme typen velden en attributen zijn altijd alleen-lezen
  • Anonieme types ondersteunen geen events, custom methods, custom operators en aangepaste herschrijvingen niet
  • Anonieme types zijn impliciet verzegeld
  • Het aanmaken van anonieme types gebruikt alleen de standaardconstructor


Als we snel de vorm van een entiteit moeten definiëren zonder de functie te definiëren, kunnen we het anonieme type gebruiken.




Vorig:SQL Server-gegevens worden geëxporteerd als een invoegscript
Volgend:.net/C# weerspiegelt niet-anonieme functies &lt;&gt;f__AnonymousType0 methoden
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com