برای ارتباط با مدیر سایت از ID تلگرام ebrahimi_younes@ استفاده نمایید. به سوالات و مشکلات برنامه نویسی پاسخ داده نمی شود.
کتاب های سی شارپ و جاوا به زبان ساده

تبدیل صریح

تبدیل صریح نوعی تبدیل است که برنامه را مجبور می کند که یک نوع داده را به نوعی دیگر تبدیل کند اگر این نوع تبدیل از طریق تبدیل ضمنی انجام نشود.در هنگام استفاده از این تبدیل باید دقت کرد چون در این نوع تبدیل ممکن است مقادیر اصلاح یا حذف شوند.ما میتوانیم این عملیات را با استفاده از Cast انجام دهیم. Cast فقط نام دیگر تبدیل صریح است و دستور آن به صورت زیر است :

datatypeA variableA = value;
datatypeB variableB = (datatypeB)variableA;

همانطور که قبلا مشاهده کردید نوع int را نتوانستیم به نوع byte تبدیل کنیم اما اکنون با استفاده از عمل Cast این تبدیل انجام خواهد شد :

int number1 = 5;

byte number2 = (byte)number1;

حال اگر برنامه را اجرا کنید با خطا مواجه نخواهید شد. همانطور که پیشتر اشاره شد ممکن است در هنگام تبدیلات مقادیر اصلی تغییر کنند.برای مثال وقتی که یک عدد با ممیز اعشار  مثلا از نوع double را به یک نوع int تبدیل می کنیم مقدار اعداد بعد از ممیز از بین می روند :

double number1 = 5.25;

int number2 = (int)number1;

Console.WriteLine(number2);
5

خروجی کد بالا عدد 5 است چون نوع داده ای int نمی تواند مقدار اعشار بگیرد. حالت دیگر را تصور کنید.اگر شما بخواهید یک متغیر را که دارای مقداری بیشتر از محدوده متغیر مقصد هست تبدیل کنید چه اتفاقی می افتد؟ مانند تبدیل زیر که می خواهیم متغیر  number1 را که دارای مقدار 300 است را به نوع بایت تبدیل کنیم که محدود اعداد بین 255-0 را پوشش می دهد.

int number1 = 300;

byte number2 = (byte)number1;

Console.WriteLine("Value of number2 is {0}.", number2);
Value of number2 is 44.

خروجی کد بالا عدد 44 است. Byte فقط می تواند شامل اعداد 0 تا 255 باشد و نمی تواند مقدار 300 را در خود ذخیره کند.حال می خواهیم ببینیم که چرا به جای عدد 300 ما عدد 44 را در خروجی می گیریم. این کار به تعداد بیتها بستگی دارد.یک byte  دارای 8 بیت است درحالی که int دارای 32 بیت است. حال اگر به مقدار باینری 2 عدد توجه کنید متوجه می شوید که چرا خروجی عدد 44 است.

300 = 00000000000000000000000100101100 
255 =                         11111111 
 44 =                         00101100

خروجی بالا نشان می دهد که بیشترین مقدار byte که عدد 255 است می تواند فقط شامل 8 بیت باشد (11111111) بنابراین فقط 8 بیت اول مقدار int به متغیر byte انتقال می یابد که شامل (00101100) یا عدد 44 در مبنای 10 است. قرار ندادن یک مقدار مناسب در داخل یک متغیر باعث ایجاد یک سرریز (overflow) می شود. یک مورد آن سرریز ریاضی نام دارد که در مثال زیر مشاهده می کنید :

byte sum = (byte)(150 + 150);

گرچه در این تبدیل،  ما داده هایی را از دست می دهیم، اما کامپایلر کد ما  را قبول می کند.برای اینکه برنامه هنگام وقوع سرریز پیغام خطا بدهد می توان از کلمه کلیدی checked استفاده کرد.

int number1 = 300;

byte number2 = checked((byte)number1);

Console.WriteLine("Value of number2 is {0}.", number2);
Unhandled Exception: System.OverflowException: Arithmetic operation resulted in an overflow ...

برنامه پیغام  System.OverflowException  که به زبان ساده نشان دهند وقوع خطاست.در نتیجه شما می توانید از اجرای برنامه جلوگیری کنید.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. mohammad5050 پاسخ دادن

    خیلی عالی . سپاسگذارم

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم، لطف دارین