![]() |
|
Nullable Value Types في VB2008 - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Nullable Value Types في VB2008 (/showthread.php?tid=4720) |
Nullable Value Types في VB2008 - RaggiTech - 01-10-12 كاتب الموضوع : samerselo
في بعض الأحيان نتعامل مع قيمة ذات نوع ولكنها قد لا تملك قيمة محددة في حالات معينة فحقل في قاعدة بيانات مثلا يمكن تمييزه بين أن له قيمة ذات معنى أو أن ليس له قيمة أبدا. عندها يمكننا توسيع أنواع القيم لتأخذ إما قيما عادية أو قيم لا شئ null Value وهذا التوسيع يدعى nullable type.كل nullable type يتم إنشاؤه من التركيب Nullable(T). ففي المثال التالي يتم التصريح عن متغير يحمل النوع Nullable Boolean Type كما يلي كود : Dim ridesBusToWork1? As Booleanيمكنك التصريح عن متغيرات أو خصائص أو حتى مصفوفات أو إجراءات من nullable types كما يمكنك إعادة Nullable type من وظيفة ما. ولكن لا يمكنك إنشاء nullable type من نوع مرجعي Reference type مثل المصفوفات أو الفئات أو String فالنوع الأساسي يجب أن يكون نوع بالقيمة Value type تعتبر الخصائص HasValue و Value هي العناصر الأكثر أهمية في nullable type فمن أجل متغير من النوع nullable type تخبرنا الخاصية HasValue فيما إذا كان للمتغير قيمة محددة أم لا فإن كانت قيمة تلك الخاصية True عندها يمكنك قراءة قيمة المغير من الخاصية Value ويجب عليك الانتباه إلى أن كلتا الخاصيتين HasValue و Value هما خاصيتين للقراءة فقط. عندما تصرح عن متغير من النوع nullable type تكون القيمة الافتراضية للخاصية HasValue هي False وهذا يعني أن المتغير في الحالة الافتراضية لا يحمل أي قيمة محددة عوضا عن القيمة الافتراضية لنوع القيمة المؤسس لهذا النوع ففي المثال التالي لا يكون للمتغير numberOfChildren قيمة محددة مع أن القيمة الافتراضية للنوع Integer هي الصفر كود : Dim numberOfChildren? As Integerكما يمكن ضبط قيمة المتغير من النوع nullable type بالطريقة الاعتيادية كما في المثال التالي الذي يضبط قيمة للمتغير numberOfChildren الذي تم التصريح عنه في المثال السابق كود : numberOfChildren = 2كود : numberOfChildren = Nothingللحصول على القيمة المخزنة في متغير من النوع nullable type يجب عليك أولا فحص الخاصية HasValue للتأكد من أنها تحمل قيمة فإن حاولت قراءة قيمة ذلك المتغير وكانت قيمة خاصيته HasValue مساوية لـ False سوف يقوم فيجول بايزيك بإطلاق استثناء InvalidOperationException ويرينا المثال التالي الطريقة المنصوح بها لقراءة قيمة المتغير numberOfChildren الخاصة بالمثال السابق كود : If numberOfChildren.HasValue Thenb1 b2 b1 And b2 b1 Or b2 Nothing Nothing Nothing Nothing Nothing True Nothing True Nothing False False Nothing True Nothing Nothing True True True True True True False False True False Nothing False Nothing False True False True False False False False كود : Dim b1? As BooleanExpression is not true
لاحظ ان AndAlso و OrElse اللتين تستخدمان التقييم المختصر تقومان بتقييم معاملهما الثاني في حالة كون التعبير الأول قد تم تقييم قيمته إلى NothingExpression is not false إن كان كلا أو أحد المعاملات في معادلة رياضية أو منطقية أو إزاحة nullable فستكون النتيجة أيضا nullable وإن كان لكلا المعاملين قيمة لا تساوي Nothing تتم العملية وفق قيم تلك المعاملات كما لو أنهما من نوع قيمة وليس nullable ففي المثال التالي المتغير compare1 والمتغير sum1 نوعان ضمنيان فإن أوقفت مشيرة الفأرة قليلا فوقهما ستلاحظ أن المترجم يشير إلى أن كلاهما من nullable type كود : 'Variable n is a nullable type, but both m and n have proper values.كود : ' Change the value of n to Nothing. |