Bagikan melalui


Kunci (Visual Basic)

Kata kunci Key memungkinkan Anda menentukan perilaku untuk properti jenis anonim. Hanya properti yang Anda tetapkan sebagai properti utama dapat berpartisipasi dalam pengujian kesetaraan antara instans jenis anonim, atau perhitungan nilai kode hash. Nilai properti kunci tidak dapat diubah.

Anda menetapkan 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 bukan.

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. Kompiler 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 akan ditimpa.

Persamaan

Dua instans jenis anonim akan setara jika instansnya dari jenis yang sama dan jika nilai properti kuncinya setara. 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 yang sama seperti flight1 karena keduanya menetapkan 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 dinyatakan 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.

Penghitungan Kode Hash

Seperti Equals, fungsi hash yang didefinisikan dalam GetHashCode untuk jenis anonim didasarkan pada properti kunci jenis itu. 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 lebih 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 utama bukanlah instans dari jenis yang sama. Mereka memiliki nilai kode hash yang berbeda bahkan ketika nama dan nilai semua propertinya sama. Pernyataan berikut mengembalikan False.

Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)

Nilai Baca-saja

Nilai properti kunci tidak dapat diubah. Misalnya, dalam flight1 pada contoh sebelumnya, bidang Airline 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"

Lihat juga