Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 31087|Odpowiedź: 0

[Źródło] Anonimowy Dziennik Nauki Typów w C#

[Skopiuj link]
Opublikowano 16.10.2020 17:41:04 | | | |
Gdy nie chcemy definiować złożonych klas, takich jak metody złożone, zdarzenia czy konstruktory, możemy dynamicznie wygenerować niestandardowy typ danych -> anonimowy typ.

1. Określ rodzaj anonimowości

Definiując anonimowy typ, musisz użyć słowa kluczowego var oraz składni inicjalizacji obiektów.

var: Kompilator automatycznie generuje nową definicję klasy podczas kompilacji (nie widzimy nazwy klasy w kodzie C#).

Inicjalizacja: Kompilator powie o utworzeniu prywatnych pól tła i (tylko do odczytu) właściwości dla nowo utworzonego typu.

Skonstruuj anonimowy typ poprzez przekazanie parametrów i wydrukowanie odpowiednich informacji



Call: Typy anonimowe można również budować przy użyciu hardkodu



2. Wewnętrzna reprezentacja anonimowych typów

Wszystkie anonimowe typy automatycznie dziedziczą z obiektu, więc możemy użyć ToString, GetHashCode, Equals na obiekcie samochodu, spróbujmy to nazwać:



Rozmowy i wyniki:







Typ obiektu samochodu to: <>f__AnonymousType03 (Twój może być inny), anonimowa nazwa typu jest odczuwana przez kompilator, nie możemy ingerować, kod CIL.

3. Implementacja metod ToString() i GetHashCode().

1.ToString()



2. GetHashCode()

Wykorzystuje zmienną każdego anonimowego typu do obliczenia wartości skrótu jako wpisu typu System.Collections.Generic.EqualityComparer i <T>generuje tę samą wartość skrótu tylko wtedy, gdy oba anonimowe typy mają te same właściwości i przypisana jest ta sama wartość.

4. Równa semantyka anonimowych typów

Równa się()





Przeanalizuj wyniki:

1. Equals(): Kompilator nadpisuje Equals(), aby ustalić, że obiekty są równe na podstawie semantyki wartości (np. notuje wartość każdego członka danych dwóch obiektów)

2. == Operatory: Ponieważ typy anonimowe nie przeciążają równoważnych operatorów (== , !=), == porównuje odwołania, a nie treść.

3. GetType(): Ponieważ jeśli zadeklarujemy dwa identyczne (z tymi samymi atrybutami) anonimowe typy w tym samym asemblerze, kompilator wygeneruje tylko definicję jednego anonimowego typu.

5. Typy anonimowe zawierające typy anonimowe



Streszczenie:

W rzeczywistości powinniśmy być ostrożni przy używaniu typów anonimowych, zwłaszcza przy użyciu LINQ, i nigdy nie rezygnować z używania silnie typowanych klas lub struktur z powodu pojawienia się typów anonimowych.

W rzeczywistości sam typ anonimowy ma wiele ograniczeń:

  • Nie kontrolujesz nazwiska anonimowego typu
  • Typy anonimowe dziedziczą System.Object
  • Anonimowe typy pól i atrybutów są zawsze tylko do odczytu
  • Anonimowe typy nie obsługują zdarzeń, niestandardowych metod, operatorów niestandardowych ani niestandardowych przepisywań
  • Typy anonimowe są ukryte w tajemnicy
  • Tworzenie jednostek anonimowych używa wyłącznie domyślnego konstruktora


Jeśli musimy szybko zdefiniować kształt jednostki bez definiowania jej funkcji, możemy użyć anonimowego typu.




Poprzedni:Dane SQL Server są eksportowane jako skrypt wstawień
Następny:.net/C# odzwierciedla funkcje nieanonimowe &lt;&gt;f__AnonymousType0 metody
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com