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

أنواع المجهول لا توفر آلية مباشرة لتحديد أنواع بيانات الخصائص. أنواع كل الخصائص مُسْتَنْتجة.. في المثال التالي أنواع من Name و Price مُسْتَنْتجة مباشرة من القيم التي تُستَعملُ لتهيئتهم.

' Variable product is an instance of a simple anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}

الأنواع المجهولة يُمْكِنُ أَنْ تَستنتجَ أيضاً أسماء الخصائص والأنواع من مصادر أخرى. توفر الأقسام التالية قائمة من الحالات حيث أنَّ الإستدلال محتمل و أمثلة المواقف أنه ليس كذلك.

الإستدلال الناجح

الأنواع المجهولة يُمْكِنُ أَنْ تَستنتجَ أيضاً أسماء الخصائص والأنواع من المصادر التاليه:

  • من أسماء المتغيرات. الـنوع المجهولanonProduct سيملك الخاصيتين productName و productPrice. أنواع بياناتهم سَتَكُونُ مِنْ تلك المتغيّراتِ الأصليةِ،String و Double، على التوالي.

    Dim productName As String = "paperclips"
    Dim productPrice As Double = 1.29
    Dim anonProduct = New With {Key productName, Key productPrice}
    
    ' To create uppercase variable names for the new properties,
    ' assign variables productName and productPrice to uppercase identifiers.
    Dim anonProduct1 = New With {Key .Name = productName, Key .Price = productPrice}
    
  • من خاصية أو حقل الأسماء لكائنات أخرى. على سبيل المثال، ضع في الاعتبار car الكائن CarClass النوع الذي يتضمن Name و ID الخصائص. لإنشاء مثيل جديد من النوع المجهول car1، مع Name و ID الخصائص التي تم تهيئتها مع القيم الموجودة في car الكائن يمكنك كتابة ما يلي:

    Dim car1 = New With {Key car.Name, Key car.ID}
    

    التعريف السابق يكافئ الخط الطويل من التعليمات البرمجية التي تعرف النوع المجهول car2.

    Dim car2 = New With {Key .Name = car.Name, Key .ID = car.ID}
    
  • من أسماء أعضاء XML.

    Dim books = <Books>
                    <Book Author="Jesper Aaberg">
                        Advanced Programming Methods
                    </Book>
                </Books>
    Dim anon = New With {books...<Book>}
    

    الـنوع الناتج لـ anon سيكون لديه خاصية واحدة Book، من النوع IEnumerable(من XElement).

  • من الدالة التي لا تمتلك معلمات مثل SomeFunction في المثال التالي.

    Dim sc As New SomeClass

    Dim anon1 = New With {Key sc.SomeFunction()}

    الـمتغيرanon2 في التعليمات البرمجية التالية هو نوع مجهول يحتوي على خاصية واحدة, حرف باسم First. هذه التعليمات البرمجية ستعرض حرف "E," الحرف الذي يتم إرجاعه بواسطة دالة First.

    Dim aString As String = "Example String"
    Dim anon2 = New With {Key aString.First()}
    ' The variable anon2 has one property, First.
    Console.WriteLine(anon2.First)
    

فشل الإستدلالِ

ستفشل استنتاج الاسم في العديد من الحالات، بما في ذلك التالي:

  • يَشتقُّ الإستدلالُ من استدعاء أسلوب أو خاصية ذات معلمات التي تتطلب الوسيطات,أو الدالة الإنشائية , . التعريف السابق لـ anon1 يفشل إذا someFunction تحتوي وسيط أو أكثر.

    ' Not valid.

    ' Dim anon3 = New With {Key sc.someFunction(someArg)}

    التعيين لاسم خاصية جديد يحل المشكلة.

    ' Valid.

    Dim anon4 = New With {Key .FunResult = sc.someFunction(someArg)}

  • يَشتقُّ الإستدلالُ من تعبير مركب.

    Dim aString As String = "Act "
    ' Not valid.
    ' Dim label = New With {Key aString & "IV"}
    

    يمكن حل الخطأ بواسطة تعيين نتيجة التعبير إلى اسم الخاصية.

    ' Valid.
    Dim label1 = New With {Key .someLabel = aString & "IV"}
    
  • ينتج الإستدلال لخصائص متعددة اثنين أو أكثر من الخصائص التي لها نفس الاسم. بالإشارة إلى تعريفات في الأمثلة السابقة ، لا يمكنك عرض كلا product.Name و car1.Name كخصائص من نفس النوع المجهول. هذا لأن المعرّفَ المُسْتَنْتجَ لكُلّ هذه سَيَكُونُ Name.

    ' Not valid.

    ' Dim anon5 = New With {Key product.Name, Key car1.Name}

    يمكن حل المشكلة عن طريق تعيين القيم إلى أسماء خصائص مميزة.

    ' Valid.
    Dim anon6 = New With {Key .ProductName = product.Name, Key .CarName = car1.Name}
    

    لاحظ أن تغير في حالة (تغييرات بين الأحرف الكبيرة والصغيرة) لا تجعل اسمين مختلفان.

    Dim price = 0

    ' Not valid, because Price and price are the same name.

    ' Dim anon7 = New With {Key product.Price, Key price}

  • يَعتمدُ النوعُ الأوليُ والقيمةُ مِنْ خاصية واحدة على الخاصية الأخرى التي لَمْ تُؤسّسْ حتى الآن. على سبيل المثال، .IDName = .LastName غير صالح في تعريف النوع المجهول إلا إذا .LastName تم بالفعل تهيئته.

    ' Not valid.

    ' Dim anon8 = New With {Key .IDName = .LastName, Key .LastName = "Jones"}

    في هذا المثال، يمكنك حل المشكلة عن طريق عكس الترتيب الذي تم فيه تعريف الخصائص.

    ' Valid.
    Dim anon9 = New With {Key .LastName = "Jones", Key .IDName = .LastName}
    
  • اسم الخاصية من النوع المجهول هو نفس اسم العضو في Object. على سبيل المثال، التصريح التالي فشل لأن Equals طريقة لــ Object.

    ' Not valid.

    ' Dim relationsLabels1 = New With {Key .Equals = "equals", Key .Greater = _

    ' "greater than", Key .Less = "less than"}

    يمكن حل المشكلة بتغيير اسم الخاصية:

    ' Valid 
    Dim relationsLabels2 = New With {Key .EqualString = "equals",
                                     Key .GreaterString = "greater than",
                                     Key .LessString = "less than"}
    

راجع أيضًا:

المهام

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

المرجع

المفتاح (Visual Basic)

المبادئ

مهيئات الكائن أنواع مسماة و مجهولة

استدلال الـنوع المحلي

أنواع مجهولة

مقارنة أنواع مجهولة و مسماة