Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 31087|Odpověď: 0

[Zdroj] C# Anonymní deník typového učení

[Kopírovat odkaz]
Zveřejněno 16.10.2020 17:41:04 | | | |
Když nechceme definovat složité třídy jako komplexní metody, události a konstruktory, můžeme dynamicky generovat vlastní datový typ -> anonymní typ.

1. Definujte typ anonymity

Při definování anonymního typu je potřeba použít klíčové slovo var a syntaxi inicializace objektu.

var: Kompilátor automaticky vygeneruje novou definici třídy při kompilaci (název třídy v kódu C# nevidíme).

Inicializace: Kompilátoru řekne, aby vytvořil soukromá pozadí a (pouze pro čtení) vlastnosti pro nově vytvořený typ.

Vytvořte anonymní typ předáním parametrů a vytiskněte relevantní informace



Call: Anonymní typy lze také vytvořit pomocí hardcode



2. Interní reprezentace anonymních typů

Všechny anonymní typy automaticky dědí z objektu, takže můžeme použít ToString, GetHashCode, Equals na objektu auta, zkusme to nazvat:



Hovory a výsledky:







Typ objektu auta je: <>f__AnonymousType03 (ten váš může být jiný), anonymní název typu je cítit kompilátorem, nemůžeme zasahovat, CIL kód.

3. Implementace metod ToString() a GetHashCode().

1.ToString()



2. GetHashCode()

Používá proměnnou každého anonymního typu k výpočtu hashovací hodnoty jako vstupu typu System.Collections.Generic.EqualityComparer a <T>stejnou hash hodnotu vytvoří pouze tehdy, pokud mají oba anonymní typy stejné vlastnosti a stejnou hodnotu.

4. Stejná sémantika anonymních typů

Rovná se()





Analyzujte výsledky:

1. Equals(): Kompilátor přepisuje Equals(), aby určil, že objekty jsou si rovné na základě sémantiky hodnot (např. zaznamenává hodnotu každého datového člena dvou objektů)

2. == Operátory: Protože anonymní typy nezatěžují ekvivalentní operátory (== , !=), == porovnává reference, nikoli obsah.

3. GetType(): Protože pokud deklarujeme dva identické (se stejnými atributy) anonymní typy ve stejném assembleru, kompilátor vygeneruje pouze definici jednoho anonymního typu.

5. Anonymní typy obsahující anonymní typy



Shrnutí:

Ve skutečnosti bychom měli být opatrní při používání anonymních typů, zejména při používání LINQ, a nikdy se nevzdávat používání silně typovaných tříd nebo struktur kvůli vzniku anonymních typů.

Ve skutečnosti má samotný anonymní typ mnoho omezení:

  • Nemáte kontrolu nad jménem anonymního typu
  • Anonymní typy dědí System.Object
  • Anonymní typy polí a atributů jsou vždy pouze pro čtení
  • Anonymní typy nepodporují události, vlastní metody, vlastní operátory a vlastní přepisy
  • Anonymní typy jsou implicitně zapečetěné
  • Vytváření entit anonymních typů používá pouze výchozí konstruktor


Pokud potřebujeme rychle definovat tvar entity bez definování její funkce, můžeme použít anonymní typ.




Předchozí:Data SQL Serveru jsou exportována jako insert skript
Další:.net/C# odráží neanonymní funkce &lt;&gt;f__AnonymousType0 metody
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com