Anahtar (Visual Basic)

anahtar Key sözcüğü anonim türlerin özellikleri için davranış belirtmenizi sağlar. Anonim tür örnekleri arasındaki eşitlik testlerinde veya karma kod değerlerinin hesaplanmasında, yalnızca anahtar özellikler olarak sizin olarak sizin de bildiğiniz özellikler yer almaktadır. Anahtar özelliklerinin değerleri değiştirilemez.

Anahtar sözcüğünü başlatma listesine bildiriminin önüne yerleştirerek anonim bir türün özelliğini anahtar Key özellik olarak atamayı unutmayın. Aşağıdaki örnekte ve temel Airline FlightNo özelliklerdir, ancak Gate değildir.

Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
                        Key .FlightNo = 3554, .Gate = "C33"}

Yeni bir anonim tür oluşturulduğunda, doğrudan 'den Object devralıyor. Derleyici devralınan üç üyeyi geçersiz kılar: Equals , GetHashCode ve ToString . ve için üretilen geçersiz kılma Equals GetHashCode kodu, anahtar özelliklerine dayalıdır. türünde anahtar özellikleri yoksa ve geçersiz GetHashCode Equals kılınmamışsa.

Eşitlik

İki anonim tür örneği, aynı türde örneklerse ve anahtar özelliklerinin değerleri eşitse eşittir. Aşağıdaki örneklerde, aynı anonim türün örnekleri olduğundan ve anahtar özellikleri için eşleşen değerlere sahip olduğundan önceki flight2 flight1 örnekten eşittir. Ancak, flight3 bir anahtar özelliği için farklı bir flight1 değere sahip olduğundan değerine eşit FlightNo değildir. Örnek, flight4 anahtar özellikler olarak farklı flight1 özelliklere sahip olduğundan ile aynı tür değildir.

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))

İki örnek ad, tür, sıra ve değerle aynı olan yalnızca anahtar olmayan özelliklerle bildirildi ise, iki örnek eşit değildir. Anahtar özellikleri olmayan bir örnek yalnızca kendisine eşittir.

İki anonim türü örneğin aynı anonim türün örnekleri olduğu koşullar hakkında daha fazla bilgi için bkz. Anonim Türler.

Karma Kod Hesaplaması

gibi Equals anonim bir tür için içinde tanımlanan karma GetHashCode işlevi, türün anahtar özelliklerine dayalıdır. Aşağıdaki örneklerde, anahtar özellikleri ve karma kod değerleri arasındaki etkileşim gösterildi.

Tüm anahtar özellikleri için aynı değerlere sahip anonim bir tür örnekleri, anahtar olmayan özellikler eşleşen değerlere sahip olsa bile aynı karma kod değerine sahiptir. Aşağıdaki deyim True döndürür.

Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)

Bir veya daha fazla anahtar özelliği için farklı değerlere sahip anonim bir türün örnekleri farklı karma kod değerlerine sahiptir. Aşağıdaki deyim False döndürür.

Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)

Anahtar özellikleri olarak farklı özelliklere sahip anonim türlerin örnekleri aynı türde örnekler değildir. Tüm özelliklerin adları ve değerleri aynı olsa bile farklı karma kod değerleri vardır. Aşağıdaki deyim False döndürür.

Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)

Read-Only Değerleri

Anahtar özelliklerinin değerleri değiştirilemez. Örneğin, önceki flight1 örneklerde ve alanları Airline salt okunur FlightNo ancak Gate değiştirilebilir.

' 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"

Ayrıca bkz.