Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Egy névtelen típusú példány deklarációjára válaszul a fordító létrehoz egy új osztálydefiníciót, amely tartalmazza a típus megadott tulajdonságait.
Compiler-Generated kód
A következő definícióhoz producta fordító létrehoz egy új osztálydefiníciót, amely tulajdonságokat Nametartalmaz , Priceés OnHand.
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", Key .Price = 1.29, .OnHand = 24}
Az osztálydefiníció az alábbihoz hasonló tulajdonságdefiníciókat tartalmaz. Figyelje meg, hogy a kulcstulajdonságoknak nincs Set metódusa. A kulcstulajdonságok értékei írásvédettek.
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
Emellett a névtelen típusdefiníciók paraméter nélküli konstruktort is tartalmaznak. A paramétereket igénylő konstruktorok nem engedélyezettek.
Ha egy névtelen típusdeklaráció legalább egy kulcstulajdonságot tartalmaz, a típusdefiníció felülbírálja a következő három tagot Object: Equals, GetHashCodeés ToString. Ha nincs kulcstulajdonság deklarálva, csak ToString felül lesz bírálva. A felülírások a következő funkciókat biztosítják:
Equalsakkor adTruevissza, ha két névtelen típusú példány azonos, vagy ha megfelelnek a következő feltételeknek:Ugyanazzal a tulajdonsággal rendelkeznek.
A tulajdonságok deklarálása ugyanabban a sorrendben történik, ugyanazokkal a névvel és ugyanazokkal a kikövetkeztetett típusokkal. A név-összehasonlítások nem megkülönböztetik a kis- és nagybetűket.
A tulajdonságok közül legalább az egyik kulcstulajdonság, és a
Keykulcsszó ugyanazon tulajdonságokra lesz alkalmazva.Az egyes megfelelő kulcstulajdonság-párok összehasonlítása
Trueeredményez.Az alábbi példákban a
Equalscsak aTrueésemployee01esetén ad visszaemployee08értéket. Az egyes sorok előtt található megjegyzés megadja, hogy miért nem egyezik meg az új példány a(z)employee01-val.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))
GetHashcodeegy megfelelően egyedi GetHashCode-algoritmust biztosít. Az algoritmus csak a kulcstulajdonságokat használja a kivonatkód kiszámításához.ToStringösszefűzött tulajdonságértékeket tartalmazó sztringet ad vissza az alábbi példában látható módon. A kulcs- és a nem kulcstulajdonságok is szerepelnek benne.Console.WriteLine(employee01.ToString()) Console.WriteLine(employee01) ' The preceding statements both display the following: ' { Name = Bob, Category = 3, InOffice = False }
A névtelen típusú explicit névvel ellátott tulajdonságok nem ütköznek ezekkel a létrehozott metódusokkal. Vagyis nem használhat .Equals, .GetHashCodeés .ToString nem nevezhet el tulajdonságot.
A legalább egy kulcstulajdonságot tartalmazó névtelen típusdefiníciók az interfészt System.IEquatable<T> is implementálják, ahol T a névtelen típus típusa.
Megjegyzés:
A névtelen típusdeklarációk csak akkor hozzák létre ugyanazt a névtelen típust, ha ugyanabban a szerelvényben fordulnak elő, a tulajdonságok neve és a kikövetkeztetett típusok azonosak, a tulajdonságok ugyanabban a sorrendben vannak deklarálva, és ugyanazok a tulajdonságok kulcstulajdonságokként vannak megjelölve.