تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الاستدلال المحلي على النوع Local Type Inference من جديد VB2008
#1
كاتب الموضوع : samerselo


يستخدم المترجم في فيجول بايزيك 2008 الاستدلال على النوع Type Inference لتحديد نوع المتغيرات المحلية التي تم التصريح عنها بدون استخدام فقرة As في تعبير التصريح حيث يستدل المترجم على نوع المتغير من نوع التعبير الذي يضبط قيمة ذلك المتغير مما يوفر إمكانية تعريف المغيرات بدون تحديد نوعها كما في المثال التالي

كود :
Public Sub inferenceExample()

' Using explicit typing .
Dim num1 As Integer = 3

' Using local type inference.
Dim num2 = 3

End Sub
ولا يمكن استخدام الاستدلال على النوع عند تعريف الحقول في الفئة Class Fields فإن كان num2 في المثال السابق حقلا في فئة بدلا عن كونه متغيرا محليا فسوف يولد التصريح خطأ إذا كان Option Strict On وسوف يصنف num2 على أنه غرض Object إن كان Option Strict Off وبشكل مشابه فنوع المتغيرات الساكنة Static Variables لا يمكن الاستدلال عليها إن كان Option Strict On وإن كان Option Strict Off فنوع المتغير الساكن سيكون غرض Object فإن لم تكن تريد من المتغير num2 في المثال السابق أن يكون من النوع Integer فيمكنك تحديد نوعا آخر عند التصريح عنه

كود :
Dim num3 As Object = 3 or Dim num4 As Double = 3
والكود الذي يستخدم استدلال النوع يشابه الكود الذي يعتمد على الربط المتأخر Late Binding الذي سيكون نوعه معروفا فقط في زمن التشغيل. ومعرفة النوع بشكل مبكر يمكن المترجم من تحديد المشاكل قبل التنفيذ وحجز الذاكرة بدقة وإجراء عمليات التحسين الأخرى بالإضافة إلى تمكين بيئة التطوير من تزويد المبرمج بـ IntelliSense والمساعدة حول أعضاء ذلك الغرض بالإضافة إلى تفضيله لاعتبارات خاصة بالأداء بسبب أن جميع البيانات التي تخزن باستخدام الربط المتأخر يجب تغليفها وكأنها من النوع Object والوصول إلى الأعضاء في زمن التشغيل سيكون أبطأ.
يحدث الاستدلال على النوع عندما يتم التصريح عن المتغير بدون استخدام فقرة As في تعبير التصريح وضبط قيمة لذلك المتغير فيستخدم المترجم نوع تلك القيمة كنوع للمتغير فمثلا سطور الكود التالية تعرف متغيرا من النوع String

كود :
' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"
ويستعرض الكود التالي طريقتان متكافئتان لإنشاء مصفوفة من النوع Integer

كود :
' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}
كما يمكنك استخدام الاستدلال على النوع لتحديد نوع متغير التحكم لحلقة تكرارية ففي الكود التالي سيتعرف المترجم على num بأنه من النوع Integer لأن someNumbers2 عبارة عن مصفوفة Integer

كود :
Dim total = 0
For Each number In someNumbers2
total += number
Next
ويستخدم الاستدلال على النوع في العبارة Using أيضا لتحديد نوع اسم المصدر كما هو واضح في المثال التالي

كود :
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
ويستدل على نوع المتغير من القيمة المعادة من الإجراء أيضا كما هو ظاهر في الكود التالي حيث يكون pList1 و pList2 عبارة عن Lists of Processes

كود :
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()
وقد قدم فيجول بايزيك 2008 خيارا جديدا هو Option Infer يمكنك من تحديد إذا كان الاستدلال المحلي على النوع مسموحا أم لا في ملف معين. فلتمكين أو تعطيل خيار الاستدلال على النوع اكتب التعبير المناسب من السطرين التاليين في بداية الملف

كود :
Option Infer On
Option Infer Off
وإن لم تقم بتحديد قيمة للخيار Option Infer في الكود فالمترجم سيستخدم الخيار الافتراضي Option Infer On من أجل المشاريع التي تم إنشاؤها في Visual Basic 2008 والخيار Option Infer Off من أجل المشاريع التي تمت ترقيتها من إصدارات سابقة. وإن تضاربت قيمة الخيار Option Infer في الملف مع القيمة المضبوطة في خيارات بيئة التطوير أو في سطر الأوامر فسوف يتم استخدام القيمة الموجودة في الملف.
ويستخدم الاستدلال على النوع فقط في المتغيرات الغير ساكنة Non-Static ولا يمكن استخدامها في تعريف حقول الفئة Class Fields أو الخصائص Properties أو الإجراءات Functions
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Private Text Encryption -خدمة للمبرمجين في جديد عالم التشفير- RaggiTech 1 3,549 07-05-20, 05:48 AM
آخر رد: سعود
Lightbulb [VB.NET] تايمر جديد اسرع بأضعاف من التايمر العادي ؟! 3booody 9 5,319 27-11-19, 11:33 PM
آخر رد: 3booody
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 8 8,763 01-10-18, 03:03 AM
آخر رد: LEO
  Nullable Value Types في VB2008 oneyemenweb2 0 1,790 06-10-12, 11:37 PM
آخر رد: oneyemenweb2
  معلومة ::: local Samples folder -!!! RaggiTech 0 1,503 06-10-12, 09:46 PM
آخر رد: RaggiTech
  كونترول جديد من مايكروسوفت MsChart Control RaggiTech 1 3,131 05-10-12, 03:04 PM
آخر رد: RaggiTech
  نوع بيانات جديد (تاريخ) RaggiTech 0 1,978 05-10-12, 03:34 AM
آخر رد: RaggiTech
  فصل العمليات الحسابية من النوع String، ( الجزء الثالث - عمليات الأقواس ) RaggiTech 0 2,620 04-10-12, 01:41 PM
آخر رد: RaggiTech
  فصل العمليات الحسابية من النوع String، ( الجزء الثاني - العمليات المتعددة ) RaggiTech 0 2,672 04-10-12, 01:27 PM
آخر رد: RaggiTech
  جديد 2010- اكتب الكود الذي سيستخدم فئتك ثم قم بإنشائها RaggiTech 0 2,256 03-10-12, 12:27 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم