كاتب الموضوع : 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