Ketika kita tidak ingin mendefinisikan kelas kompleks seperti metode, peristiwa, dan konstruktor yang kompleks, kita dapat secara dinamis menghasilkan tipe data kustom -> jenis anonim.
1. Tentukan jenis anonimitas
Saat menentukan jenis anonim, Anda perlu menggunakan kata kunci var dan sintaks inisialisasi objek.
var: Kompiler secara otomatis menghasilkan definisi kelas baru pada waktu kompilasi (kita tidak dapat melihat nama kelas dalam kode C#).
Inisialisasi: Ini akan memberi tahu kompiler untuk membuat bidang latar belakang pribadi dan properti (hanya-baca) untuk jenis yang baru dibuat.
Buat jenis anonim dengan meneruskan parameter dan mencetak informasi yang relevan
Panggilan: Jenis anonim juga dapat dibuat menggunakan hardcode
2. Representasi internal dari jenis anonim
Semua jenis anonim secara otomatis mewarisi dari Object, sehingga kita dapat menggunakan ToString, GetHashCode, Equals pada objek mobil, mari kita coba memanggil ini:
Panggilan dan hasil:
Jenis objek mobil adalah: <>f__AnonymousType03 (milik Anda mungkin berbeda), nama jenis anonim dirasakan oleh kompiler, kami tidak dapat mengganggu, kode CIL.
3. Implementasi metode ToString() dan GetHashCode().
1.KepadaString()
2. GetHashCode()
Ini menggunakan variabel setiap jenis anonim untuk menghitung nilai hash sebagai input jenis System.Collections.Generic.EqualityComparer, dan hanya <T>menghasilkan nilai hash yang sama jika dua jenis anonim memiliki properti yang sama dan diberi nilai yang sama.
4. Semantik yang sama dari jenis anonim
Sama dengan ()
Analisis hasilnya:
1. Equals(): Kompiler mengganti Equals() untuk menentukan bahwa objek sama berdasarkan semantik nilai (misalnya, mencatat nilai setiap anggota data dari dua objek)
2. == Operator: Karena jenis anonim tidak membebani operator yang setara (== , !=), == membandingkan referensi, bukan konten.
3. GetType(): Karena jika kita mendeklarasikan dua jenis anonim yang identik (dengan atribut yang sama) dalam rakitan yang sama, kompiler hanya akan menghasilkan definisi dari satu jenis anonim.
5. Jenis anonim yang mengandung tipe anonim
Ringkasan:
Padahal, kita harus berhati-hati dalam menggunakan tipe anonim, terutama ketika menggunakan LINQ, dan jangan pernah menyerah menggunakan kelas atau struktur yang diketik dengan kuat karena munculnya tipe anonim.
Faktanya, tipe anonim itu sendiri memiliki banyak keterbatasan:
- Anda tidak mengontrol nama jenis anonim
- Jenis anonim mewarisi System.Object
- Jenis bidang dan atribut anonim selalu baca-saja
- Jenis anonim tidak mendukung peristiwa, metode kustom, operator kustom, dan penulisan ulang kustom
- Jenis anonim disegel secara implisit
- Pembuatan entitas jenis anonim hanya menggunakan konstruktor default
Jika kita perlu dengan cepat menentukan bentuk entitas tanpa menentukan fungsinya, kita dapat menggunakan jenis anonim. |