توسيع و تضييق التحويلات
هناك اعتبار مهم مع نوع التحويل و هو ما إذا كانت نتيجة التحويل ضمن نطاق نوع بيانات الوجهة. توسيع التحويل يغيِر القيمة إلى نوع البيانات التي يمكن أن تعدّل أي قيمة محتملة للبيانات الأصلية. التحويل التضييقي يغيِر القيمة إلى نوع البيانات الذي قد لا يتمكن من الاحتفاظ ببعض القيم المحتملة.
اتساع التحويلات
يبين الجدول التالي اتساع التحويلات القياسي.
نوع البيانات |
توسيع لأنواع البيانات1 |
---|---|
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double 2 |
|
Long, Decimal, Single, Double 2 |
|
ULong, Decimal, Single, Double 2 |
|
Decimal, Single, Double 2 |
|
Single, Double |
|
Double |
|
أي نوع تم إعداده ( التعداد) |
نوع التكامل الأساسي الخاص به و أي نوع يوسعه النوع الأساسي |
Char, String |
|
مصفوفة Char |
Char مصفوفة String |
أي نوع |
|
أي نوع مشتق |
أي نوع أساسي من الذي تم اشتقاقه 3 |
أي نوع |
أية واجهة يطبقها |
أي نوع بيانات أو نوع الكائن |
1 من التعريف ، كل نوع بيانات يوسع لنفسه.
2 تحويلات من Integer، UInteger، Long، ULong، أو Decimal إلى Single أو Double قد ينتج عنه ضياع في الدقة و لكن لا يحدث ضياع في المقدار أبداً. في هذا الاتجاه فإنها لا تتطلب فقدان للمعلومات.
3 قد يبدو مفاجئا أن التحويل من النوع المشتق إلى أحد أنواعه الأساسية قد تم توسيعه. و المبرر لذلك أن النوع المشتق يتضمن كل أعضاء النوع الأساسي لذلك يتأهل ليصبح كـمثيل للنوع الأساسي. و في الاتجاه المعاكس لا يحتوي النوع الأساسي أي أعضاء جدد معرَفة من قبل النوع المشتق .
التحويلات الموسعة تنجح دوماً في وقت التشغيل و لا تتطلب فقدان بيانات. يمكنك دوماً تنفيذهم ضمنيًا، سواء كان كشف الخيار الصارمِ يعين تبديل التحقق من النوع إلى On أو إلى Off.
التحويلات المضيَقة
التحويل التضييقي القياسي يتضمن ما يلي:
في الجدول السابق التوجيهات العكسية لإجراء التحويل التوسيعي (فيما عدا أن كل نوع يوسع لنفسه)
عمليات التحويل في أي اتجاه بين منطقية و أي نوع رقمي
عمليات التحويل من أي نوع رقمي إلى أي نوع تم تعداده (Enum)
عمليات التحويل في أي الاتجاه بين سلسة و أي نوع عددي ، Boolean، أو تاريخ
عمليات التحويل من نوع البيانات أو نوع الكائن إلى النوع المشتقة منه
التحويل التضييقي لا ينجح دوماً في وقت التشغيل و يمكن أن يفشل أو يتطلب فقدان بيانات. يحدث خطأ إذا كان نوع بيانات الوجهة لا يستطيع تلقي القيمة المحوَلة. على سبيل المثال، يمكن أن ينتج التحويل الرقمي تجاوزاً. المحول البرمجي لا يسمح لك بإجراء تحويل تضييقي ضمنيًا إلا إذا عيَن ال كشف الخيار الصارمِ مُبَدْل التحقق من النوع إلى Off.
ملاحظة
يـمنع خطأ تحويل التضييق للتحويلات من العناصر في For Each…Next المجموعة إلى متغير عنصر تحكم التكرار الحلقي. للحصول على مزيد من المعلومات وأمثلة, راجع مقطع "تحويلات التضييق" في عبارة Visual Basic) For Each...Next).
عند استخدام تحويلات التضييق
يمكنك استخدام المحول التضييقي عند معرفة أن قيمة المصدر يمكن تحويلها إلى نوع بيانات الوجهة بدون فقدان بيانات أو حدوث خطأ. على سبيل المثال، إذا كان لديك String و التي تعرف أنها تحتوي على "صح" أو "خطأ" ، يمكنك استخدام الكلمة الأساسية CBool لتحويله إلى Boolean.
استثناءات أثناء التحويل
لأن التحويلات الموسعة دوماً تنجح ،و لا تقوم بطرح الاستثناءات. عند فشل التحويلات التضييقية أكثرهم يقوم بطرح الاستثناءات التالية:
InvalidCastException -إذا لم يتم تعريف تحويل بين النوعين
OverflowException -(أنواع تكامل فقط) إذا كانت القيمة المحولة أكبر بكثير بالنسبة لنوع الهدف
إذا كانت الفئة أو البنية تعرّف دالة CType لتعمل كعامل تحويل إلى أو من تلك الفئة أو البنية ،و التي CType يمكن أن تقوم بطرح أي استثناء يكون مناسب. بالإضافة إلى ذلك، يوجد CTypeالذي قد يتصل بدوال Visual Basic أو طرق .NET Framework ،والذي بدوره قد يطرح تشكيلة من الاستثناءات.
راجع أيضًا:
المهام
كيفية القيام بما يلي: تحويل الكائن إلى نوع آخر في Visual Basic
المرجع
خلاصة نوع بيانات (Visual Basic)
المبادئ
أنواع البيانات في Visual Basic
تغييرات القيمة أثناء التحويلات
عمليات التحويل بين سلاسل وأنواع أخرى
البرمجة اللا نوعية في Visual Basic