Definisi Tipe Anonim (Visual Basic)
Menanggapi deklarasi instans jenis anonim, pengkompilasi membuat definisi kelas baru yang berisi properti yang ditentukan untuk jenis tersebut.
Kode yang Dihasilkan Pengompilasi
Untuk definisi product
berikut, pengkompilasi membuat definisi kelas baru yang berisi properti Name
, Price
, dan OnHand
.
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", Key .Price = 1.29, .OnHand = 24}
Definisi kelas berisi definisi properti yang mirip dengan yang berikut ini. Perhatikan bahwa tidak ada metode Set
untuk properti kunci. Nilai properti kunci bersifat baca-saja.
Public Class $Anonymous1
Private _name As String
Private _price As Double
Private _onHand As Integer
Public ReadOnly Property Name() As String
Get
Return _name
End Get
End Property
Public ReadOnly Property Price() As Double
Get
Return _price
End Get
End Property
Public Property OnHand() As Integer
Get
Return _onHand
End Get
Set(ByVal Value As Integer)
_onHand = Value
End Set
End Property
End Class
Selain itu, definisi jenis anonim berisi konstruktor tanpa parameter. Konstruktor yang memerlukan parameter tidak diizinkan.
Jika deklarasi jenis anonim berisi setidaknya satu properti kunci, definisi jenis mengambil alih tiga anggota yang diwarisi dari Object: Equals, GetHashCode, dan ToString. Jika tidak ada properti kunci yang dideklarasikan, hanya ToString yang diambil alih. Pengambil-alihan menyediakan fungsionalitas berikut:
Equals
mengembalikanTrue
jika dua instans jenis anonim adalah instans yang sama, atau jika memenuhi kondisi berikut:Mereka memiliki jumlah properti yang sama.
Properti dideklarasikan dalam urutan yang sama, dengan nama yang sama dan jenis disimpulkan yang sama. Perbandingan nama tidak peka huruf besar/kecil.
Setidaknya salah satu properti adalah properti kunci, dan kata kunci
Key
diterapkan ke properti yang sama.Perbandingan setiap pasangan properti kunci yang sesuai mengembalikan
True
.Misalnya, dalam contoh berikut,
Equals
mengembalikanTrue
hanya untukemployee01
danemployee08
. Komentar sebelum setiap baris menentukan alasan mengapa instans baru tidak cocok denganemployee01
.Dim employee01 = New With {Key .Name = "Bob", Key .Category = 3, .InOffice = False} ' employee02 has no InOffice property. Dim employee02 = New With {Key .Name = "Bob", Key .Category = 3} ' The first property has a different name. Dim employee03 = New With {Key .FirstName = "Bob", Key .Category = 3, .InOffice = False} ' Property Category has a different value. Dim employee04 = New With {Key .Name = "Bob", Key .Category = 2, .InOffice = False} ' Property Category has a different type. Dim employee05 = New With {Key .Name = "Bob", Key .Category = 3.2, .InOffice = False} ' The properties are declared in a different order. Dim employee06 = New With {Key .Category = 3, Key .Name = "Bob", .InOffice = False} ' Property Category is not a key property. Dim employee07 = New With {Key .Name = "Bob", .Category = 3, .InOffice = False} ' employee01 and employee 08 meet all conditions for equality. Note ' that the values of the non-key field need not be the same. Dim employee08 = New With {Key .Name = "Bob", Key .Category = 2 + 1, .InOffice = True} ' Equals returns True only for employee01 and employee08. Console.WriteLine(employee01.Equals(employee08))
GetHashcode
menyediakan algoritma GetHashCode yang unik dengan tepat. Algoritma hanya menggunakan properti kunci untuk menghitung kode hash.ToString
mengembalikan string nilai properti yang digabungkan, seperti yang ditunjukkan dalam contoh berikut. Properti kunci dan non-kunci disertakan.Console.WriteLine(employee01.ToString()) Console.WriteLine(employee01) ' The preceding statements both display the following: ' { Name = Bob, Category = 3, InOffice = False }
Properti bernama eksplisit dari jenis anonim tidak dapat bertentangan dengan metode yang dihasilkan ini. Artinya, Anda tidak dapat menggunakan .Equals
, .GetHashCode
, atau .ToString
untuk memberi nama properti.
Definisi jenis anonim yang menyertakan setidaknya satu properti kunci juga mengimplementasikan antarmuka System.IEquatable<T>, di mana T
adalah jenis anonim.
Catatan
Deklarasi jenis anonim membuat jenis anonim yang sama hanya jika terjadi dalam rakitan yang sama, propertinya memiliki nama yang sama dan jenis yang disimpulkan yang sama, properti dideklarasikan dalam urutan yang sama, dan properti yang sama ditandai sebagai properti kunci.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk