رد جديد  مشاركة جديدة 
التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C# (التحويل العلني Explicit Conversion دروس سى شارب)
الكاتب الرسالة
صور سيارات رووووووعه
الحريف
عضو مسجل خطر


المشاركات : 267
مجموعة : مسجل خطر
الإنتساب : Sep 2007
الحالة : غير متصل
السمعة : 0
الرد : #1
التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C#

التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C#
التحويل العلني- Explicit Conversion

<!-------------------><!--مقطع البدايه----->

<!--------------------><!--الخبر الرئيسي----->

التحويل العلني-
Explicit Conversion
في الدرس السابق تعرفنا على أول طريقة من طرق تحويل الأنواع، وهي طريقة التحويل الضمني، وذكرنا بأنه يستخدم لتحويل المتغير إلى نوع يحتاج لمساحة تخزينية أكبر مما هو عليه!
أما في النوع الثاني الذي سنتعرف عليه في هذا الدرس، فيستخدم للتحويل إلى نوع يحتاج لمساحة تخزينية أقل مما هو عليه! ولكن بشرط أن يكون حجم المتغير مناسب للمساحة الجديدة. ومثال الكتاب في الدرس السابق يوضح فكرة هذه الطريقة جيداً.
من الجدولين 1 و 2 في درس أنواع البيانات، نجد أن المساحة التخزينية المتاحة لمتغير من النوع
int
هي 2 بايت، ويشمل هذا جميع الأعداد الصحيحة
2147483648-
وحتى 2147483647 ولمتغير من النوع
long
هي 4 بايت ويشمل هذا جميع الأعداد الصحيحة من 9223372036854775808
-
وحتى 9223372036854775807.
وهذا يؤكد إمكانية تحويل أي متغير
long
إلى
int
ولكن بشرط أن تكون قيمة المتغير
long
ضمن نطاق المتغير
int
. ولكن التحويل هنا علني أي يحتاج لكتابة كود إضافي كما في المثال التالي:

int a;
long b;
b=20;
a=(int) b;
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
هذا المثال عكس المثال السابق، فقد حولنا من
long
إلى
int
، وذلك بنقل القيمة الموجودة في المتغير
b
من النوع
long
إلى المتغير
a
من النوع
int
، وهذا ممكن حيث أن القيمة 20 موجودة ضمن نطاق النوعين
long
و
int
، ويتم ذلك بكتابة نوع المتغير الذي نريد التحويل إليه بين قوسين كما هو موضح أعلاه.
هذا في حال أن القيمة موجودة ضمن نطاقي المتغيرين، ولكن ماذا لو كانت القيمة أكبر من نطاق المتغير الذي نود التحويل إليه؟
كأن نحول من النوع
short
(مساحته التخزينية 2 بايت ويشمل هذا أي عدد صحيح ضمن النطاق من 32768- إلى 32767) إلى النوع
byte
(مساحته التخزينية 1 بايت ويشمل هذا أي عدد صحيح ضمن النطاق من 0 إلى 255) وذلك بنقل القيمة 257 من متغير نوعه
short
إلى متغير نوعه
byte
؟
طبّق معنا هذا المثال لنرى النتيجة:

byte val1;
short val2;
val2=257;
val1= (byte) val2;
Console.WriteLine("val1 = {0}", val1);
Console.WriteLine("varl = {0}", val2);
لاحظ أن النتيجة ستظهر كالتالي:
نلاحظ أن القيمة قد تغيرت بعد نقلها إلى المتغير
val1
، أي بعد تحويلها من النوع
short
إلى النوع
byte
، ومن البديهي أن يحصل مثل هذا الأمر، والذي يعتبر من خطأ المبرمج وليس خطأ الكومبيوتر!
فكما عرفنا أن الكومبيوتر يحتفظ بالبيانات في صورتها الرقمية، أي في صورة سلسة من 0 أو 1 والتي يتم تخزين كل منها في خانة عشرية
bit
.
والنوع
byte
يحجز مساحة قدرها 1 بايت أي 8 خانات عشرية (1 بايت = 8 خانات عشرية) لتخزين قيمة المتغير من النوع
byte
فيها، بينما النوع
short
فيحجز مساحة قدرها 2 بايت أي 16 خانة عشرية لتخزين قيمة المتغير من النوع
short
فيها.
المساحة التخزينية المحجوزة للمتغير
val1
من النوع
byte
المساحة التخزينية المحجوزة للمتغير
val
2
من النوع
short
في المثال السابق، قمنا بتخزين القيمة 257 في المتغير
val2
وهو من النوع
short
وتم تخزينه كما يلي في ذاكرة الكومبيوتر:
وعند نقل هذه القيمة إلى المتغير
val1
وهو من النوع
byte
يتم تخزين البيانات بدءً من اليمين إلى اليسار وحتى 8 خانات فقط وهي المساحة التخزينية المتاحة لهذا النوع! كالتالي:
وهذه القيمة الثنائية مساوية للواحد، ولهذا فالنتيجة ظهرت مساوية للواحد بعد نقل القيمة للمتغير
val1
في المثال السابق.
هذا الأمر قد يسبب مشاكل في البرنامج، إذا لم ينتبه المبرمج لذلك أثناء البرمجة!
وأفضل طريقة لتجنب حدوث مثل هذا الأمر من دون انتباه المبرمج، هي إضافة الأمر التالي لتنبيه المستخدم برسالة خطأ إذا انتقلت القيمة بصورة غير كاملة إلى متغير ذو مساحة تخزينية أقل من احتياجه. وهناك طريقتين لذلك؛ كتابة كود إضافي، أو بتفعيل هذه الخاصية ضمن بيئة الدوت نت.
الطريقة الأولى:
checked(expression);
أو العبارة التالية لعدم التنبيه:
unchecked(expression);
وهذا المثال السابق بعد استخدام أمر التحقق من أن المتغير الجديد مناسب للقيمة المنقولة إليه:

byte val1;


short val2;

val2=257;

val1=checked((byte) val2);

Console.WriteLine("val1 = {0}", val1);

Console.WriteLine("varl = {0}", val2);

بعد تنفيذ هذا الكود ستظهر رسالة الخطأ التالية:
والطريقة الأخرى كما ذكرنا ضمن بيئة
VS.NET
تجعل المترجم ينبه المبرمج عن هذا الخطأ دون الحاجة لكتابة الأمر السابق، وذلك بالنقر على اسم المشروع في نافذة
Window Explorer
بالزر الأيمن، وأختيار
Properities
، لتظهر نافذة جديدة، اختر
Configuration Properties
من القائمة الموجودة على يسار هذه النافذة، ثم أختر
build.
ثم من القائمة الموجودة على يمين هذه النافذة غير في خصائص الخاصية
Check for Arithmetic Overflow/Underflow
واجعلها
True
كما هو موضح في الشكل التالي:

التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C#

09-14-2007 10:33 PM
أرسل بريد للمستخدم إعرض جميع مشاركات العضو إقتبس الرسالة فى رد

عالم السيارات العاب سيارات

اربح من الفوركس شهاده دراسيه عبر الانترنت اتصل من الكمبيوتر مجانا
الحريف
عضو مسجل خطر


المشاركات : 267
مجموعة : مسجل خطر
الإنتساب : Sep 2007
الحالة : غير متصل
السمعة : 0
الرد : #2
RE: التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C#

منقوووول

09-14-2007 10:33 PM
أرسل بريد للمستخدم إعرض جميع مشاركات العضو إقتبس الرسالة فى رد
رد جديد  مشاركة جديدة 
التحويل العلني - Explicit Conversion - دروس سى شارب C# - دروس السى شارب C#

إحتمالات التقييم ...
المشاركة : الكاتب الردود : المشاهدات : آخر رد
  الرجااااااااء المساعدة وبسرعة musabxbs 1 301 03-06-2008 11:27 PM
آخر رد: عاشقة السعاده
  Regular Expression --2 - دروس سى شارب C# - دروس السى شارب C# الحريف 1 666 09-14-2007 10:52 PM
آخر رد: الحريف
  Regular Expression --1 - دروس سى شارب C# - دروس السى شارب C# الحريف 1 690 09-14-2007 10:49 PM
آخر رد: الحريف
  مدخل إلى البرمجة غرضيّة التوجّه في السي شارب - دروس سى شارب C# - دروس السى شارب C# الحريف 1 732 09-14-2007 10:47 PM
آخر رد: الحريف
  ربط الفلاش بال #C - دروس سى شارب C# - دروس السى شارب C# الحريف 1 606 09-14-2007 10:45 PM
آخر رد: الحريف
  الدوال --2--#Methods in c - دروس سى شارب C# - دروس السى شارب C# الحريف 1 471 09-14-2007 10:43 PM
آخر رد: الحريف
  الدوال --1--#Methods in c - دروس سى شارب C# - دروس السى شارب C# الحريف 1 678 09-14-2007 10:40 PM
آخر رد: الحريف
  السيطرة على الأخطاء Exception Handling - دروس سى شارب C# - دروس السى شارب C# الحريف 1 331 09-14-2007 10:37 PM
آخر رد: الحريف
  المؤشرات في سي شارب - دروس سى شارب C# - دروس السى شارب C# الحريف 1 704 09-14-2007 10:35 PM
آخر رد: الحريف
  تحويل الأنواع - التحويل الضمني - دروس سى شارب C# - دروس السى شارب C# الحريف 0 410 09-14-2007 10:28 PM
آخر رد: الحريف
  المتغيرات - Variables - دروس سى شارب C# - دروس السى شارب C# الحريف 2 582 09-14-2007 10:27 PM
آخر رد: الحريف
  أنواع البيانات – Data Types - دروس سى شارب C# - دروس السى شارب C# الحريف 1 374 09-14-2007 10:24 PM
آخر رد: الحريف
  البرنامج الأول في C# - دروس سى شارب C# - دروس السى شارب C# الحريف 1 404 09-14-2007 10:23 PM
آخر رد: الحريف
  البرنامج الأول في C# - دروس سى شارب C# - دروس السى شارب C# الحريف 0 529 09-14-2007 10:22 PM
آخر رد: الحريف
  نقاط مهمة في C# - دروس سى شارب C# - دروس السى شارب C# الحريف 0 852 09-14-2007 10:20 PM
آخر رد: الحريف

مشاهدة نسخة للطباعة
إرسال المشاركة لصديق
إشترك بالمشاركة | إضافة المشاركة للمفضلة

الذهاب إلى :

 Quick Theme: