Anonim Tür Tanımı (Visual Basic)
anonim tipbir örneğini bildirim yanıt olarak, derleyici türü için belirtilen özellikler içeren yeni bir sınıf tanımı oluşturur.
Derleyicinin ürettiði kod
Aşağıdaki tanımı için product, derleyici özellikler içeren yeni bir sınıf tanımı oluşturur Name, Price, ve OnHand.
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", Key .Price = 1.29, .OnHand = 24}
sınıf tanımı aşağıdakine benzer özellik tanımlarını içerir.Orada olduğuna dikkat edin yok Set anahtar özellikleri için yöntem . anahtar özellikler, değerler salt okunur.
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
Buna ek olarak, varsayılan bir oluşturucu anonim tip tanımları içerir.Parametrelerine gerek duyar Kurucular izin verilmez.
anonim tipbildirim en az bir anahtarözellikiçeriyorsa, devralınan üç üye tür tanımında geçersiz kılar Object: Equals, GetHashCode, ve ToString. Hiçbir anahtar özellikler, yalnızca bildirilir, ToString geçersiz kılınır.Geçersiz kılmaları aşağıdaki işlevselliği sağlar:
Equalsdöner True iki anonim tip örnekleri aynı örneğe iseniz veya aşağıdaki koşulları karşıladığından:
Bunlar aynı özellikleri vardır.
Özellikler aynı adlarla aynı sırada bildirilir ve aynı olayla türleri.Adı karşılaştırmaları büyük küçük harf duyarlı değildir.
Özelliklerden biri olan anahtarözellikve Key anahtar sözcük aynı özellikleri uygulanır.
anahtar özellikler karşılık gelen her çifti karşılaştırmasını verir True.
Örneğin, aşağıdaki örneklerde, Equals döndüren True sadece employee01 ve employee08.Neden yeni örnek eşleşmiyor nedeni her çizgi belirtir önce yorum employee01.
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))
GetHashcodeuygun şekilde benzersiz bir GetHashCode algoritmasağlar.algoritma anahtar Özellikler karma kodhesaplamak için kullanır.
ToStringAşağıdaki örnekte gösterildiği gibi bir dize art arda eklenmiş özellik değerleri döndürür.Her iki anahtar ve olmayan-anahtar özellikler eklenmiştir.
Console.WriteLine(employee01.ToString()) Console.WriteLine(employee01) ' The preceding statements both display the following: ' { Name = Bob, Category = 3, InOffice = False }
Bir anonim tip açıkça adlandırılmış özellikleri ile oluşturulan bu yöntemler çakışmamalıdır.Diğer bir deyişle, kullanamazsınız .Equals, .GetHashCode, veya .ToString bir özellikadı vermek.
Ayrıca, en az bir anahtarözellik içeren anonim tür tanımları uygulamak IEquatable arabirim, burada T anonim tiptürüdür.
[!NOT]
Anonim tür bildirimleri oluşturmak yalnızca aynı derlemeiçinde oluşursa aynı anonim tip , bunların özelliklerini aynı ada sahip ve aynı türleri olayla özelliklerini sırayla bildirilir ve aynı özellikleri anahtar özellik olarak işaretlenir.
Ayrıca bkz.
Görevler
Nasıl yapılır: Anonim Türde Bildirimlerden Özellik Adları ve Türlerini Çıkarma (Visual Basic)