Megosztás a következőn keresztül:


Kulcs (Visual Basic)

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)

Írásvédett é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"

Lásd még