تعريف النوع المجهول
استجابة إلى تعريف مثيل لنوع مجهول المترجم البرمجي يقوم بإنشاء تعريف فئة جديد الذي يحتوي على الخصائص المحددة لنوع.
تعليمات برمجية منشأة عن طريق برنامج التحويل البرمجي
للتعريف التالي product، ينشئ المحول البرمجي تعريف فئة جديد يحتوي على الخصائص Name، Price، و OnHand.
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", Key .Price = 1.29, .OnHand = 24}
تعريف الفئة يحتوي على ملفات تعريف خاصية مماثلة للتالي. لاحظ أنه ليس هناك أية Set أسلوب لخصائص المفتاح . قيم خصائص المفتاح للقراءة فقط.
Public Class $Anonymous1
Private _name As String
Private _price As Double
Private _onHand As Integer
Public Property Name() As String
Get
Return _name
End Get
End Property
Public Property Price() As Double
Get
Return _price
End Get
End Property
Public Property OnHand() As Integer
Get
Return _onHand
End Get
Set(ByVal Value As Integer)
_onHand = Value
End Set
End Property
End Class
بالإضافة إلى ذلك،ملفات تعريف النوع المجهول تحتوي على الدالة الإنشائية الافتراضية. المُنشئات التي تتطلب معلمات غير مسموح بها .
إذا احتوى إعلان النوع المجهول على الأقل على خاصية مفتاح واحدة ، يتجاوز تعريف النوع ثلاثة أعضاء موروثة من Object: Equals ، GetHashCode و ToString إذا لم يتم تعريف خصائص المفتاح،فقط ToString يتم إبطال. التجاوزات توفر الوظائف التالية:
Equals ترجع True إذا كانت مثيلين من النوع المجهول هما نفس المثيل أو إذا اتفقا بالشروط التالية:
لديهما نفس عدد خصائص.
الخصائص يتم تعريفها بنفس الترتيب باستخدام نفس الأسماء وأنواع المستنتجة نفسها. مقارنات الاسم ليست حساسة لحالة الأحرف.
على الأقل أحد الخصائص هو خاصية المفتاح Key و يتم تطبيق الكلمة الأساسية إلى نفس الخصائص.
يتم إرجاع المقارنة بين كل ننشأ ازدواجي المطابقة لخصائص المفتاحTrue.
على سبيل المثال، في الأمثلة التالية Equals إرجاع True فقط من أجل employee01 و employee08. يعين التعليق قبل كل خط السبب لماذا لا يتطابق المثيل الجديد employee01.
Dim employee01 = New With {Key .Name = "Bob", Key .Category = 3, .InOffice = False} ' employee02 has no InOffice property. Dim employee02 = New With {Key .Name = "Bob", Key .Category = 3} ' The first property has a different name. Dim employee03 = New With {Key .FirstName = "Bob", Key .Category = 3, .InOffice = False} ' Property Category has a different value. Dim employee04 = New With {Key .Name = "Bob", Key .Category = 2, .InOffice = False} ' Property Category has a different type. Dim employee05 = New With {Key .Name = "Bob", Key .Category = 3.2, .InOffice = False} ' The properties are declared in a different order. Dim employee06 = New With {Key .Category = 3, Key .Name = "Bob", .InOffice = False} ' Property Category is not a key property. Dim employee07 = New With {Key .Name = "Bob", .Category = 3, .InOffice = False} ' employee01 and employee 08 meet all conditions for equality. Note ' that the values of the non-key field need not be the same. Dim employee08 = New With {Key .Name = "Bob", Key .Category = 2 + 1, .InOffice = True} ' Equals returns True only for employee01 and employee08. Console.WriteLine(employee01.Equals(employee08))
GetHashcode يوفر خوارزمية GetHashCode الفريد و بشكل مناسب. تستخدم الخوارزمية فقط خصائص المفتاح لحساب التعليمات البرمجية التجزئية.
ToString تقوم بإرجاع سلسلة من قيم الخصائص المترابطة كما هو موضح في المثال التالي. كلا خصائص المفتاح والالمفتاح يتم ضمها.
Console.WriteLine(employee01.ToString()) Console.WriteLine(employee01) ' The preceding statements both display the following: ' { Name = Bob, Category = 3, InOffice = False }
خصائص المسمية بوضوح للنوع المجهول لا تتعارض مع هذه الأساليب التي تم إنشاؤها. ولذلك لا يمكنك استخدام .Equals, .GetHashCode، أو .ToString لتَسْمِية خاصية.
ملفات تعريف النوع المجهول تتضمن على خاصية مفتاح واحدة على الأقل و أيضاً تنفذ System.IEquatable<T> واجهة حيث T هو نوع من النوع المجهول.
ملاحظة
تعريفات النوع المجهول ينشئ نفس النوع المجهول فقط إذا حدث في نفس التجميع، خصائصهم تحمل نفس الأسماء و نفس أنواع الإشارة، الخصائص يتم تعريفها في نفس الترتيب،و الخصائص المماثلة يتم وضع علامة كخصائص المفتاح.
راجع أيضًا:
المهام
كيفية القيام بما يلي: تعريف مثيل من النوع المجهول
كيفية القيام بما يلي: أسماء الخصائص الاستدلال و الأنواع في تعريفات نوع مجهول