المفتاح (Visual Basic)

الـكلمة الأساسية Key تمكنك من تحديد سلوك للخصائص ذات الأنواع المجهولة. فقط الخصائص تقوم تعيينها كخصائص مفتاح المشاركة في اختبارات المساواة بين المثيلات ذات نوع مجهول أو حساب قيم التعليمات البرمجية التجزئة . قيم الخصائص الأساسية لا يُمْكن أنْ تُغيّرَ..

تقوم بـتعيين خاصية من نوع مجهول كخاصية مفتاح عن طريق وضع الكلمة الأساسية Key أمام تعريفها في قائمة عملية التهيئة. في المثال التالي، Airline وFlightNo هو خصائص المفتاح ولكن Gate ليس بذلك.

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

عند إنشاء نوع مجهول جديد فانه يرث مباشرة من Object. يتجاوز المحول البرمجي ثلاثة أعضاء موروثة: Equals ، GetHashCode و ToString التعليمات البرمجية المتجاوزه يتم انتاجها من أجل Equals و GetHashCode يعتمد على خصائص المفتاح. إذا لم يكن هناك أية خصائص مفتاح في النوع, GetHashCode و Equals لم يتم تجاوزها.

المساواة

يـتساوى مثيلين من نفس نوع المجهول إذا كان لهما نفس النوع و كانت قيم خصائص المفتاح الخاصة بهم متساوية. في الأمثلة التالية flight2 مساو لـ flight1 من المثال السابق لأنهم مثيلات من نفس النوع المجهول ولهم قيم خصائص مفتاح متطابقة. ومع ذلك، flight3 غير مساو لـ flight1 لأنه يحتوي على قيمة مختلفة لخاصية المفتاح FlightNo. مثيل flight4 ليس نفس نوع flight1 بسبب أنهم يقومون بتعيين خصائص مختلفة كخصائص مفتاح.

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

إذا تم تعريف مثيلين مع فقط بلا خصائص مفتاح ، متطابقة في الاسم, النوع, الترتيب والقيمته, اذا المثيلين غير متساويين. مثيل بدون خصائص مفتاح يساوي فقط نفسه.

لمزيد من المعلومات حول الحالات التي يكون فيها مثيلين من النوع المجهول هو مثيلين من نفس النوع المجهول, راجع أنواع مجهولة.

حساب التعليمات البرمجية التجزئة

مثلEquals، دالة تجزئة المعرفة في GetHashCode لنوع مجهول مستندة إلى خصائص المفتاح للنوع. تبين الأمثلة التالية التفاعل بين خصائص المفتاح و قيم التعليمات البرمجية التجزئة.

مثيلات من النوع المجهول التي تحتوي نفس القيملكل خصائص المفتاح لهم نفس قيمة التعليمات البرمجية التجزئة حتى إذا لم يكن لدى خصائص بلا المفتاح قيم متطابقة. ترجع العبارة التالية True.

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

مثيلات من نوع مجهول التي تحتوي قيم مختلفة لخاصية مفتاح أو أكثر لهم قيم التعليمات البرمجية التجزئة مختلفة. ترجع العبارة التالية False.

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

مثيلات من الأنواع المجهولة التي تعيين خصائص مختلفة كخصائص مفتاح ليست مثيلات من نفس النوع. لديهم قيم تعليمات برمجية تجزئة مختلفة حتى لو كانت كل الأسماء و القيم لكل الخصائص هي نفسها. ترجع العبارة التالية False.

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

قيم للقراءة فقط

قيم الخصائص الأساسية لا يُمْكن أنْ تُغيّرَ.. على سبيل المثال، في flight1 في الأمثلة السابقة Airline و FlightNo الحقول للقراءة فقط ولكن Gate يمكن أن تتغير.

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

راجع أيضًا:

المهام

كيفية القيام بما يلي: أسماء الخصائص الاستدلال و الأنواع في تعريفات نوع مجهول

كيفية القيام بما يلي: تعريف مثيل من النوع المجهول

المبادئ

تعريف النوع المجهول

أنواع مجهولة