Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kata Key kunci memungkinkan Anda menentukan perilaku untuk properti jenis anonim. Hanya properti yang Anda tetapkan sebagai properti utama yang berpartisipasi dalam pengujian kesetaraan antara instans jenis anonim, atau perhitungan nilai kode hash. Nilai properti kunci tidak dapat diubah.
Anda menunjuk properti jenis anonim sebagai properti kunci dengan menempatkan kata kunci Key di depan deklarasinya dalam daftar inisialisasi. Dalam contoh berikut, Airline dan FlightNo merupakan properti utama, tetapi Gate tidak.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "C33"}
Ketika jenis anonim baru dibuat, jenis tersebut mewarisi langsung dari Object. Pengkompilasi mengambil alih tiga anggota yang diwariskan: Equals, GetHashCode, dan ToString. Kode penimpaan yang diproduksi untuk Equals dan GetHashCode didasarkan pada properti utama. Jika tidak ada properti kunci dalam jenis tersebut, GetHashCode dan Equals tidak ditimpa.
Kesetaraan
Dua instans jenis anonim sama jika instans dengan jenis yang sama dan jika nilai properti kuncinya sama. Dalam contoh berikut, flight2 sama dengan flight1 dari contoh sebelumnya karena merupakan instans dengan jenis anonim yang sama dan memiliki nilai yang cocok untuk properti kuncinya. Namun, flight3 tidak sama dengan flight1 karena memiliki nilai yang berbeda untuk properti kunci, FlightNo. Instans flight4 bukan jenis flight1 yang sama seperti karena menunjuk properti yang berbeda sebagai properti utama.
Dim flight2 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "D14"}
' The following statement displays True. The values of the non-key
' property, Gate, do not have to be equal.
Console.WriteLine(flight1.Equals(flight2))
Dim flight3 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 431, .Gate = "C33"}
' The following statement displays False, because flight3 has a
' different value for key property FlightNo.
Console.WriteLine(flight1.Equals(flight3))
Dim flight4 = New With {Key .Airline = "Blue Yonder Airlines",
.FlightNo = 3554, .Gate = "C33"}
' The following statement displays False. Instance flight4 is not the
' same type as flight1 because they have different key properties.
' FlightNo is a key property of flight1 but not of flight4.
Console.WriteLine(flight1.Equals(flight4))
Jika dua instans dideklarasikan hanya dengan properti non-kunci, identik dalam nama, jenis, urutan, dan nilai, kedua instans tidak sama. Instans tanpa properti kunci hanya sama dengan dirinya sendiri.
Untuk informasi selengkapnya tentang kondisi di mana dua instans jenis anonim adalah instans dengan jenis anonim yang sama, lihat Jenis Anonim.
Perhitungan Kode Hash
Seperti Equals, fungsi hash yang didefinisikan untuk GetHashCode jenis anonim didasarkan pada properti kunci jenis . Contoh berikut menunjukkan interaksi antara properti kunci dan nilai kode hash.
Instans jenis anonim yang memiliki nilai yang sama untuk semua properti kunci memiliki nilai kode hash yang sama, bahkan jika properti non-kunci tidak memiliki nilai yang cocok. Pernyataan berikut mengembalikan True.
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Instans jenis anonim yang memiliki nilai berbeda untuk satu atau beberapa properti kunci memiliki nilai kode hash yang berbeda. Pernyataan berikut mengembalikan False.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Instans jenis anonim yang menunjuk properti yang berbeda karena properti kunci bukanlah instans dengan jenis yang sama. Mereka memiliki nilai kode hash yang berbeda bahkan ketika nama dan nilai semua properti sama. Pernyataan berikut mengembalikan False.
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Nilai Read-Only
Nilai properti kunci tidak dapat diubah. Misalnya, dalam flight1 contoh sebelumnya, Airline bidang dan FlightNo bersifat baca-saja, tetapi Gate dapat diubah.
' The following statement will not compile, because FlightNo is a key
' property and cannot be changed.
' flight1.FlightNo = 1234
'
' Gate is not a key property. Its value can be changed.
flight1.Gate = "C5"