منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : Type Casting In C#.NET
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
((ربِ اشرح لي صدري ويسر لي أمري وأحلل عقدةً من لساني يفقهوا قولي))
 
السلام عليكم ورحمة الله وبركاته
 
*بعد غيـــــــــــاب طويــــــــل عن النشر والتفاعل بالمنتدى نظراً لظروفٍ خاصة وأعتذر عن ذلك بشدة.
 
عدت لكم اليوم بمقالة بسيطة وسلسة لكنها مهمة في نفس الوقت ولعل الكثيرين من المبتدئين لا يعرفون معناها ألا وهي الـــType Casting، كما هو واضح من عنوان المقالة.
 
في مقالة سابقة كنت قد تطرقت عن عملية التحويل بين البيانات بعنوان Bohgxing and UnBoxing In C#.NET تستطيع مراجعتها من الرابط التالي: Boxing and UnBoxing
لكنها تختلف عن هذا الموضوع بكونها التحويل يتم بين الـ Value Types والـ Reference Types.
 
أما هذا الموضوع فيختص بالتحويل بين بيانات الـ Value Types فقط.
 
ملاحظة// أنواع البيانات هي ثلاثة:
1-  Value Type.
2-  Reference Type.
3-  Pointer Type.

تعريف:

Type Casting: يقصد بها ببساطة التحويل بين البيانات ويتوفر في أغلب لغات البرمجة حيث تسمح بالتحويل بين مختلف أنواع البيانات من نوع Value Type
 
أنواعها:

        هنالك نوعان من الـــ Type Casting ومن خلالهما نتمكن من التحويل بين البيانات من نوع لآخر من البيانات.

1-  التحويل الضمني Implicit Type: وهي عملية تحويل البيانات من نوع لأخر ضمنياً مع ضمان عدم فقدان البيانات.
2-  التحويل غير الضمني Explicit Type: وهي عملية تحويل البيانات من نوع لأخر مع وجود خطورة احتمالية فقدان جزء من البيانات، وهذه العملية يجب توخي الحذر فيها.

الشرح:

        أولاً: التحويل الضمني يتم بين البيانات المتوافقة مع بعضها البعض ويتم تلقائياً دون فقدان البيانات أثناء عملية التحويل.
ويمكن تعريفها بأنها تقوم بأسناد البيانات من النوع الأصغر حجماً الى نوع آخر أكبر منها حجماً.
 
ملاحظة: (=) تسمى اسناد. (==) تسمى مساواة.
 
       ثانيا: التحويل غير الضمني يتم بين البيانات غير المتوافقة فيما بينها من حيث الحجم ويتم بكتابة نوع البيانات المراد التحويل اليها بين قوسين.
ويمكن تعريفها أيضا بأنها تقوم بأسناد البيانات من النوع الأكبر حجماً الى نوع آخر أصغر حجماً.
وهذا النوع من التحويل فيها خطورة كبيرة جداً لأنها لا تضمن اسناد كافة البيانات الى النوع الآخر بمعنى أنه يوجد احتمالية فقدان للبيانات أثناء عملية التحويل.

مثال على الــ Implicit:



مثال على الــ Explicit:



لاحظ ودقق معي جيداً 
 
الذي حصل في الكود تم حجز 8 بت في الذاكرة للمتغير b وحجز 32 بت للمتغير x وتم اسناد القيمة 257 الى المتغير x، لكن اثناء اسناد المتغير x الذي يحمل القيمة 257 الى المتغير b حصل فقدان للبيانات والسبب هو أنه اثناء عملية التحويل حصل قطع جزء من البيانات والسبب هو أن الـ byte يتحمل من 0 الى 255.

اذاً كيف أصبح الناتج (1)؟ الصورة أدناه توضح العملية:

أولاً: حجز 32 خانة للمتغير x في الذاكرة واسناد القيمة 257 وتمثيلها في الذاكرة تكون بالشكل التالي:

ملاحظة: تتمثل البيانات في الذاكرة بأرقام ثنائية (0, 1).



ثانياً: حجز 8 خانات للمتغير b في الذاكرة وعند اسناد المتغير x والتي تحمل القيمة 257 الى المتغير b سيتم أخذ 8 خانات فقط من خانات x من اليمين ووضعها في خانات b كما هو واضح في الصورة التالية، لذا سيكون الناتج 1.


* يتم جمع الأرقام التي تحتها 1 ويتم اهمال الأرقام التي تحتها 0، وهذه العملية تسمى Binary To Decimal Convertion.
* الأس يتم حسابه على أساس 2 مرفوع للقوة n والــ n تبدأ من الـ 0.


لا تنسوني و والديّ من صالح دعواتكم.

تحياتي لكم.
موضوع مهم لكل مبتدأ وشرح رائع جدا اخوي سجااد

كم اشتقنا لمقالاتك المميزة واسلوبك الممتع والمبسط في الشرح Smile

يعطيك العافية الورد ..
بارك الله فيك و نفع بك
فعلا مشكلة و خصوصا مع النوع Explicit Type
اشكالية فقد جزء من البيانات و خصوصا مع جهل حجم المتغير تصبح المشكلة اعقد
جزاك الله كل خير
شرح رائع........
السلام عليكم

بارك الله فيكم اخواني على التشجيع والتعليقات الجميلة

جزاكم الله خيرا Smile