توسيع و تضييق التحويلات

هناك اعتبار مهم مع نوع التحويل و هو ما إذا كانت نتيجة التحويل ضمن نطاق نوع بيانات الوجهة. توسيع التحويل يغيِر القيمة إلى نوع البيانات التي يمكن أن تعدّل أي قيمة محتملة للبيانات الأصلية. التحويل التضييقي يغيِر القيمة إلى نوع البيانات الذي قد لا يتمكن من الاحتفاظ ببعض القيم المحتملة.

اتساع التحويلات

يبين الجدول التالي اتساع التحويلات القياسي.

نوع البيانات

توسيع لأنواع البيانات1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte (بايت)

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

قصير

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer (عدد صحيح)

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double 2

Long (طويل)

Long, Decimal, Single, Double 2

ULong

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

موارد أخرى

نوع التحويلات في Visual Basic