Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 31087|Jawab: 0

[Sumber] Buku Harian Pembelajaran Tipe Anonim C#

[Salin tautan]
Diposting pada 16/10/2020 17.41.04 | | | |
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.




Mantan:Data SQL Server diekspor sebagai skrip sisipan
Depan:.net/C# mencerminkan fungsi &lt;&gt;f__AnonymousType0 metode non-anonim
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com