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

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

تعريفات

تعريفات مثيلات لأنواع مسماة و مجهولة قد تبدو متماثلة تقريباً، ولكن تأثيراتها ليست متماثلة. تحتوي كل فئة قدرات و قيود خاصة بها. يظهر المثال التالي طريقة ملائمة لتعريف و تهيئة مثيل لفئة مسماة، Customer، باستخدام قائمة مهيئ كائن. لاحظ أن اسم الفئة تم تعينه بعد الكلمة الأساسية New.

Dim namedCust = New Customer With {.Name = "Terry Adams"}

النوع المجهول له اسم غير قابل للاستخدام. لذلك إنشاء مثيل لنوع مجهول لا يمكن أن يتضمن اسم فئة.

Dim anonymousCust = New With {.Name = "Hugo Garcia"}

متطلبات و نتائج التعريفان ليست متماثلة. لأجل namedCust، الفئة Customer التي لها خاصية Name يجب أن تكون موجودة مسبقاً، و ينشئ التعريف مثيل لتلك الفئة. لأجل anonymousCust، يعرف برنامج التحويل البرمجي فئة جديدة لها خاصية واحدة، سلسلة تسمى Name، و ينشئ مثيل جديد لتلك الفئة.

أنواع مسماة

توفر مهيئات الكائن طريقة بسيطة لاستدعاء الدالة الإنشائية لنوع و ثم تعين قيم بعض أو كل الخصائص في عبارة واحدة. يقوم برنامج التحويل البرمجي باستدعاء الدالة الإنشائية المناسبة للعبارة: الدالة الإنشائية الافتراضية إذا لم يتم تقديم وسائط ، أو إذا كانت دالة إنشائية ذات معلمات يتم إرسال وسيطة واحدة أو أكثر. بعد ذلك، تتم تهيئة الخصائص المحددة في الترتيب الذي ترد فيه في قائمة المهيئ.

تتكون كل تهيئة في قائمة المُهيئ من تعيين القيمة الأولية لعضو في الفئة. يتم تحديد الأسماء وأنواع بيانات الأعضاء عند تعريف الفئة. في الأمثلة التالية، الفئة Customer يجب أن تكون موجودة، كما يجب أن يكون لها أعضاء باسم Name و City يمكنهم قبول قيم سلسلة.

Dim cust0 As Customer = New Customer With {.Name = "Toni Poe", 
                                           .City = "Louisville"}

بشكل بديل، يمكنك الحصول على نفس النتيجة عن طريق استخدام التعليمات البرمجية التالية:

Dim cust1 As New Customer With {.Name = "Toni Poe", 
                                .City = "Louisville"}

يكافئ كل من هذه التعريفات المثال التالي، الذي ينشئ كائن Customer بواسطة استخدام الدالة الإنشائية الافتراضية، ومن ثم تحديد القيم الأولية لـName و خصائص City بواسطة استخدام العبارة With.

Dim cust2 As New Customer()
With cust2
    .Name = "Toni Poe"
    .City = "Louisville"
End With

إذا كانت الفئة Customer تحتوي على دالة إنشائية بمعلمات يتيح لك ذلك إمكانية إرسال قيمة إلى Name، على سبيل المثال، يمكنك أيضاً تعريف وتهيئة كائن Customer بالطرق التالية:

Dim cust3 As Customer = 
    New Customer("Toni Poe") With {.City = "Louisville"}
' --or--
Dim cust4 As New Customer("Toni Poe") With {.City = "Louisville"}

لايتوجب عليك تهيئة كل الخصائص ، كما تظهر التعليمات البرمجية التالية.

Dim cust5 As Customer = New Customer With {.Name = "Toni Poe"}

ومع ذلك، لا يمكن لقائمة التهيئة أن تكون فارغة. الخصائص غير المهيئة تحافظ على قيمها الافتراضية.

استنتاج النوع مع أنواع مسماة

يمكنك تقصير التعليمات البرمجية للتعريف cust1 بواسطة ضم مهيئات كائن و استدلال نوع محلي. يتيح لك ذلك حذف بند As في تعريف المتغير. تتم الإشارة إلى نوع بيانات المتغير من نوع الكائن الذي يتم إنشاؤه بواسطة التعيين. في المثال التالي نوع cust6 هو Customer.

Dim cust6 = New Customer With {.Name = "Toni Poe", 
                               .City = "Louisville"}

ملاحظات حول الأنواع المسماة

  • لا يمكن تهيئة عضو فئة أكثر من مرة في قائمة مُهيئ الكائن. تعريف cust7 يسبب خطأ.

    '' This code does not compile because Name is initialized twice.
    ' Dim cust7 = New Customer With {.Name = "Toni Poe", 
    '                                .City = "Louisville",
    '                                .Name = "Blue Yonder Airlines"}
    
  • يمكن استخدام العضو لتهيئة نفسه أو حقل آخر. إذا تم الوصول إلى عضو قبل أن تتم تهيئته ، كما في التعريف التالي لـ cust8، سوف يتم استخدام القيمة الافتراضية. تذكر أن عند معالجة تعريف يستخدم مهيئ كائن، أول شيء يحدث هو استدعاء الدالة الإنشائية المناسبة. بعد ذلك، تتم تهيئة الحقول الفردية في قائمة المهيئ. في الأمثلة التالية، القيمة الافتراضية لـName يتم تعيينها إلى cust8، و يتم تعيين قيمة مهيئه في cust9.

    Dim cust8 = New Customer With {.Name = .Name & ", President"}
    Dim cust9 = New Customer With {.Name = "Toni Poe", 
                                   .Title = .Name & ", President"}
    

    يستخدم المثال التالي الدالة الإنشائية بمعلمات من cust3 و cust4 لتعريف و تهيئة cust10 و cust11.

    Dim cust10 = New Customer("Toni Poe") With {.Name = .Name & ", President"}
    ' --or--
    Dim cust11 As New Customer("Toni Poe") With {.Name = .Name & ", President"}
    
  • مهيئات الكائن ممكن أن تكون متداخلة. في المثال التالي، AddressClass هي فئة تحتوي على خاصيتين, City و State، و الفئة Customer تحتوي خاصية Address التي هي مثيل لـAddressClass.

    Dim cust12 = 
        New Customer With {.Name = "Toni Poe", 
                           .Address = 
                               New AddressClass With {.City = "Louisville", 
                                                      .State = "Kentucky"}}
    Console.WriteLine(cust12.Address.State)
    
  • قائمة التهيئة لايمكن أن تكون فارغة.

  • المثيل الذي يتم تهيئته لايمكنه أن يكون من نوع كائن.

  • أعضاء الفئة التي تتم تهيئتها لا يمكن أن تكون أعضاء مشتركة، أعضاء للقراءة فقط، ثوابت، أو استدعاءات الأسلوب.

  • أعضاء الفئة التي تتم تهيئتها لايمكن فهرستها أو تأهيلها. الأمثلة التالية ترفع أخطاء برنامج التحويل البرمجي:

    '' Not valid.

    ' Dim c1 = New Customer With {.OrderNumbers(0) = 148662}

    ' Dim c2 = New Customer with {.Address.City = "Springfield"}

أنواع مجهولة

تستخدم الأنواع المجهول مهيئات الكائن لإنشاء مثيلات لأنواع جديدة لم تقم بتعريفها و تسميتها بشكل صريح. بدلاً من ذلك، ينشئ المحول البرمجي نوع طبقاً لخصائص قمت بتعيينها في قائمة مُهيئ الكائن. لأن اسم النوع لم يتم تحديده, تتم الإشارة إليه كـ نوع مجهول. على سبيل المثال، قارن التعريف التالي بالسابق بالنسبة إلى cust6.

Dim cust13 = New With {.Name = "Toni Poe", 
                       .City = "Louisville"}

الاختلاف الوحيد في بناء الجملة هو أنه لم يتم تحديد اسم بعد New لنوع البيانات. ومع ذلك، ما يحدث هو مختلف تماما. يعرف برنامج التحويل البرمجي نوع مجهول جديد له خاصيتين، Name و City، ويقوم بإنشاء مثيل له مع القيم المحددة. يحدد استنتاج النوع أنواع Name و City في المثال لتكون سلاسل.

ملاحظة تنبيهتنبيه

يتم إنشاء اسم النوعِ المجهول بواسطة برنامج التحويل البرمجي، ويمكن أن يتباين من تحويل برمجي إلى أخر. لا يجب أن تستخدم التعليمات البرمجية الخاصة بك أو تعتمد على اسم نوع مجهول.

لأن اسم النوع غير متوفر، لا يمكنك استخدام بند As لتعرف cust13. يجب الإشارة إلى النوع الخاص به. بدون استخدام ربط في وقت التشغيل, هذا يحصر استخدام أنواع مجهولة لمتغيرات محلية.

الأنواع المجهولة توفر دعم حاسم لاستعلامات LINQ. لمزيد من المعلومات حول استخدام أنواع مجهولة في استعلامات، راجع أنواع مجهولة و مقدمة حول LINQ في Visual Basic.

ملاحظات حول الأنواع المجهولة

  • عادةً، تكون كل أو معظم الخصائص في تعريف النوع المجهول خصائص مفاتيح، المشار إليها عن طريق كتابة كلمة أساسية Key أمام اسم الخاصية.

    
    Dim anonymousCust1 = New With {Key .Name = "Hugo Garcia", 
                                   Key .City = "Louisville"}
    

    للحصول على مزيد من المعلومات حول خصائص المفاتيح ، راجع المفتاح (Visual Basic) .

  • مثل الأنواع المسماة, يجب أن تقوم قوائم المُهيئ لتعريفات النوع المجهول بتعريف خاصية واحد على الأقل.

    Dim anonymousCust = New With {.Name = "Hugo Garcia"}
    
  • عندما يتم تعريف مثيل لنوع مجهول، ينشئ المحول البرمجي تعريف نوع مجهول مطابق. أسماء وأنواع بيانات الخصائص مأخوذه من تعريف المثيل، ومضمنه بواسطة برنامج التحويل البرمجي في التعريف. لايتم تسمية و تعريف الخصائص بشكل مسبق, كما هو الحال بالنسبة للنوع المسمى. تتم الإشارة إلى الأنواع الخاصة بها. لا يمكنك تعيين أنواع بيانات الخصائص باستخدام البند As.

  • يمكن أيضاً للأنواع المجهولة تأسيس أسماء وقيم الخصائص الخاصة بها في عدة طرق أخرى. على سبيل المثال، يمكن أن تأخذ خاصية نوع مجهول كلا الاسم و القيمة لمتغير ما، أو اسم و قيمة خاصية كائن آخر.

    ' Create a variable, Name, and give it an initial value.
    Dim Name = "Hugo Garcia"
    
    ' Variable anonymousCust2 will have one property, Name, with 
    ' "Hugo Garcia" as its initial value.
    Dim anonymousCust2 = New With {Key Name}
    
    ' The next declaration uses a property from namedCust, defined
    ' in an earlier example. After the declaration, anonymousCust3 will
    ' have one property, Name, with "Terry Adams" as its value.
    Dim anonymousCust3 = New With {Key namedCust.Name}
    

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

راجع أيضًا:

المهام

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

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

كيفية القيام بما يلي: تعريف الكائن عن طريق استخدام مُهيئ الكائن

المرجع

المفتاح (Visual Basic)

المبادئ

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

أنواع مجهولة

مقدمة حول LINQ في Visual Basic

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