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.
A Key kulcsszó lehetővé teszi a névtelen típusok tulajdonságainak viselkedésének megadását. Csak a kulcstulajdonságként megjelölt tulajdonságok vesznek részt a névtelen típusú példányok közötti egyenlőség vizsgálatában vagy a kivonatkódértékek kiszámításában. A kulcstulajdonságok értékei nem módosíthatók.
Egy névtelen típusú tulajdonságot kulcstulajdonságként jelölhet ki, ha a kulcsszót Key a deklaráció elé helyezi az inicializálási listában. A következő példában AirlineFlightNo kulcstulajdonságok, de Gate nem.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "C33"}
Új névtelen típus létrehozásakor az közvetlenül a rendszertől Objectörököl. A fordító három öröklött tagot felülbírál: Equals, GetHashCodeés ToString. A kulcstulajdonságokon alapuló felülbírálási kód EqualsGetHashCode . Ha nincsenek kulcstulajdonságok a típusban, GetHashCode és Equals nincsenek felülírva.
Egyenlőség
Két névtelen típusú példány egyenlő, ha azonos típusú példányok, és ha a kulcstulajdonságok értéke egyenlő. Az alábbi példákban megegyezik flight1 az előző példával, flight2 mivel azonos névtelen típusú példányok, és a kulcstulajdonságuknak megfelelő értékekkel rendelkeznek. Ez azonban nem egyenlő azzalflight1, flight3 hogy egy kulcstulajdonság más értékkel rendelkezik. FlightNo A példány flight4 nem ugyanaz a típus, mint flight1 mivel különböző tulajdonságokat jelölnek ki kulcstulajdonságként.
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))
Ha két példány csak nem kulcstulajdonságokkal van deklarálva, névben, típusban, sorrendben és értékben azonos, akkor a két példány nem egyenlő. Egy kulcstulajdonságokat nem tartalmazó példány csak önmagával egyenlő.
További információ arról, hogy milyen feltételek mellett két névtelen típusú példány azonos névtelen típusú példány, olvassa el a Névtelen típusok című témakört.
Kivonatkód kiszámítása
A névtelen típushoz GetHashCode definiált kivonatfüggvény például Equalsa típus kulcstulajdonságán alapul. Az alábbi példák a kulcstulajdonságok és a kivonatkódértékek közötti interakciót mutatják be.
A névtelen típusú példányok, amelyek minden kulcstulajdonság esetében azonos értékekkel rendelkeznek, ugyanazzal a kivonatkód-értékkel rendelkeznek, még akkor is, ha a nem kulcstulajdonságok nem rendelkeznek egyező értékekkel. A következő utasítás ad Truevissza.
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
A névtelen típusú példányok, amelyek egy vagy több kulcstulajdonság különböző értékeivel rendelkeznek, eltérő kivonatkódértékekkel rendelkeznek. A következő utasítás ad Falsevissza.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Azok a névtelen típusok, amelyek különböző tulajdonságokat jelölnek kulcstulajdonságként, nem azonos típusú példányok. Eltérő kivonatkódértékekkel rendelkeznek akkor is, ha az összes tulajdonság neve és értéke megegyezik. A következő utasítás ad Falsevissza.
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Read-Only értékek
A kulcstulajdonságok értékei nem módosíthatók. A korábbi példákban flight1 például a Airline mezők írásvédettek FlightNo , de Gate módosíthatók.
' 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"