تبدیل صریح
تبدیل صریح یا Explicit Conversion، نوعی تبدیل است که، برنامه را مجبور میکند که یک نوع داده را به نوعی دیگر تبدیل کند، اگر این نوع تبدیل از طریق تبدیل ضمنی انجام نشود. در هنگام استفاده از این تبدیل باید دقت کرد چون در این نوع تبدیل ممکن است مقادیر اصلاح یا حذف شوند. ما میتوانیم این عملیات را با استفاده از 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 که به زبان ساده نشان دهند وقوع خطاست. در نتیجه شما میتوانید از اجرای برنامه جلوگیری کنید.
دوست عزیز سایت فوق العاده ای دارید از این بابت تشکر ویژه دارم .
و اینکه یک پیشنهاد برای هرچه بهتر شدن سایتتون داشتم
اونم اینکه داخل سایت یه قسمت رو طراحی کنید و یک سری سوال با پاسخ قرار بدید
و یا اینکه یک پروژه رو 0 تا 100 اش رو آموزش بدید …
سلام، نظر لطفتونه
بسیار ممنون بابت پیشنهادتون، بله کمبود یه پروژه و یا بخش سوال و جواب رو هم خودم حس کردم و مدتیه دارم روش کار میکنم و تا ماه های آینده، به سایت اضافه میشه.
واقعا عالیه مطالب این سایت هیچ جای دیگه ای پیدا نمیشه ممنون.
مرسی، نظر لطفتونه
خیلی عالی . سپاسگذارم
خواهش می کنم، لطف دارین