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.
Sebagai respons terhadap deklarasi instans jenis anonim, pengompilasi membuat definisi kelas baru yang berisi properti yang ditentukan untuk jenis tersebut.
Kode Compiler-Generated
Untuk definisi berikut , product
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 diwariskan dari Object: Equals, GetHashCode, dan ToString. Jika tidak ada properti kunci yang dideklarasikan, hanya ToString ditimpa. Penggantian memberikan fungsionalitas berikut:
Equals
True
mengembalikan 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 yang disimpulkan yang sama. Perbandingan nama tidak sensitif terhadap huruf besar/kecil.
Setidaknya salah satu properti adalah properti kunci, dan
Key
kata kunci diterapkan ke properti yang sama.Perbandingan setiap pasangan properti kunci yang sesuai mengembalikan
True
.Misalnya, dalam contoh berikut,
Equals
hanya mengembalikanTrue
untukemployee01
danemployee08
. Komentar sebelum setiap baris menjelaskan 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. Atribut 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 tipe anonim tidak dapat bertentangan dengan metode yang dihasilkan tersebut. Artinya, Anda tidak dapat menggunakan .Equals
, .GetHashCode
, atau .ToString
untuk memberi nama properti.
Definisi jenis anonim yang menyertakan setidaknya satu properti kunci juga mengimplementasikan System.IEquatable<T> antarmuka, di mana T
adalah jenis jenis anonim.
Nota
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.