Anahtar (Visual Basic)

anahtar sözcüğü, Key anonim türlerin özellikleri için davranış belirtmenizi sağlar. Yalnızca anahtar özellikler olarak belirlediğiniz özellikler anonim tür örnekleri arasındaki eşitlik testlerine veya karma kod değerlerinin hesaplanmasına katılır. Anahtar özelliklerin değerleri değiştirilemez.

Anonim bir türün özelliğini, anahtar sözcüğünü Key başlatma listesindeki bildiriminin önüne yerleştirerek anahtar özellik olarak belirtirsiniz. Aşağıdaki örnekte Airline ve FlightNo anahtar özellikleridir, 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 öğesinden Objectdevralır. Derleyici devralınan üç üyeyi geçersiz kılar: Equals, GetHashCodeve ToString. için Equals üretilen ve GetHashCode anahtar özelliklerine dayalı geçersiz kılma kodu. Türünde GetHashCode anahtar özellikleri yoksa ve Equals geçersiz kılınmıyorsa.

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, flight2 aynı anonim türün örnekleri olduklarından ve anahtar özellikleri için eşleşen değerlere sahip olduklarından önceki örnektekine eşittir flight1 . Ancak, flight3 bir anahtar özelliği için farklı bir değere sahip olduğundan, FlightNodeğerine eşit flight1 değildir. Farklı özellikleri anahtar özellikler olarak belirlemeleri nedeniyle örnek flight4 ile aynı tür flight1 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))

Ad, tür, sıra ve değer olarak aynı olan yalnızca anahtar olmayan özelliklerle iki örnek bildirilirse, iki örnek eşit değildir. Anahtar özellikleri olmayan bir örnek yalnızca kendisine eşittir.

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

Karma Kod Hesaplama

gibi Equals, anonim bir tür için içinde GetHashCode tanımlanan karma işlevi, türün anahtar özelliklerini temel alır. Aşağıdaki örneklerde anahtar özellikler ile karma kod değerleri arasındaki etkileşim gösterilmektedir.

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

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

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

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

Farklı özellikleri anahtar özellikler olarak tanımlayan anonim türlerin örnekleri aynı türdeki örnekler değildir. Tüm özelliklerin adları ve değerleri aynı olsa bile farklı karma kod değerlerine sahiptir. Aşağıdaki deyim döndürür False.

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

Salt Okunur Değerler

Anahtar özelliklerin değerleri değiştirilemez. Örneğin, önceki örneklerde flight1Airline ve FlightNo alanları salt okunur olsa da 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.