Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 31087|Válasz: 0

[Forrás] C# Anonim típusú tanulási napló

[Linket másol]
Közzétéve 2020. 10. 16. 17:41:04 | | | |
Amikor nem akarunk bonyolult osztályokat, mint a komplex metódusokat, eseményeket és konstruktorokat, dinamikusan generálhatunk egy egyedi adattípust -> névtelen típust.

1. Definiáljuk az anonimitás típusát

Névtelen típus meghatározásához a var kulcsszót és az objektum inicializációs szintaxist kell használni.

var: A fordító automatikusan generál egy új osztálydefiníciót a fordításkor (a C# kódban nem látjuk az osztály nevét).

Inicializáció: A fordítót megmondja, hogy hozzon létre privát háttérmezőket és (csak olvasható) tulajdonságokat az újonnan létrehozott típushoz.

Építs egy anonim típust paraméterek átadásával, és a releváns információk nyomtatásával



Hívás: Anonim típusok is össze lehet építeni kemény kóddal



2. Az anonim típusok belső ábrázolása

Minden névtelen típus automatikusan öröklik az Objektumtól, így használhatjuk a ToString, GetHashCode, Equals funkciókat az autó objektumon, próbáljuk meg ezt hívni:



Hívások és eredmények:







Az autó objektum típusa: <>f__AnonymousType03 (a tiéd más lehet), az anonim típus nevét a fordító érzékeli, nem avatkozhatunk, CIL kód.

3. A ToString() és a GetHashCode() módszerek megvalósítása.

1.ToString()



2.GetHashCode()

Minden névtelen típus változóját használja a hash érték kiszámításához a System.Collections.Generic.EqualityComparer típusbemeneteként, és csak akkor <T>adja ugyanazt a hash értéket, ha a két névtelen típus ugyanazokat a tulajdonságokat kapja, és ugyanazt az értéket kapjuk.

4. Az anonim típusok egyenlő szemantikája

Equals()





Elemezd az eredményeket:

1. Equals(): A fordító felülírja az Equals() érték-szemantika alapján (pl. megjegyezi két objektum adattagjának értékét) az objektumok egyenlőségét (pl. megjegyezi két objektum adattagjának értékét)

2. == Operátorok: Mivel az anonim típusok nem terhelnek túl az ekvivalens operátorokat (== , !=), == összehasonlítja a hivatkozásokat, nem a tartalmakat.

3. GetType(): Mert ha ugyanabban az összeszerelésben két azonos (azonos attribútummal rendelkező) névtelen típust hirdetünk, a fordító csak egy névtelen típus definícióját generálja.

5. Névtelen típusok, amelyek tartalmazzák az anonim típusokat



Összefoglalás:

Valójában óvatosnak kell lennünk az anonim típusok használatával, különösen a LINQ használatában, és soha nem szabad feladni az erősen típusozott osztályokat vagy struktúrákat az anonim típusok megjelenése miatt.

Valójában az anonim típusnak is sok korlátja van:

  • Nem te irányítod az anonim típus nevét
  • Anonim típusok öröklik a System.Object
  • Az anonim mezőtípusok és attribútumok mindig csak olvashatók
  • Az anonim típusok nem támogatják az eseményeket, egyedi metódusokat, egyedi operátorokat és egyedi újraírásokat
  • Az anonim típusok implicit lezártsággal vannak zárva
  • Az anonim típusok entitáslétrehozása csak az alapértelmezett konstruktort használja


Ha gyorsan meg kell határoznunk egy entitás alakját anélkül, hogy meghatároznánk annak függvényét, használhatjuk az anonim típust.




Előző:Az SQL Server adatait beillesztő szkriptként exportálják
Következő:A .net/C# nem névtelen függvényeket &lt;&gt;f__AnonymousType0 metódusokat tükröz
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com