خب دیدیم که تبدیل ضمنی چطوری کار می‌کنه.
ولی تبدیل صریح چیه؟
اینه که توی این ویدیو می‌خوایم بررسی کنیم.
اینجا قراره یه نوع داده رو به نوع دیگه تبدیل (cast) کنیم.
یعنی نوع داده‌ای که اطلاعات بیشتری رو نگه می‌داره رو به نوعی تبدیل کنیم که اطلاعات کمتری
می‌تونه نگه داره.
int مثلاً اگه یه داشته باشیم، می‌تونیم .
جدید بسازیم int یه
بذارید نشونتون بدم، این می‌شه تبدیل صریح.
و اینجا می‌خوام یه عدد صحیح بسازیم و تبدیلش کنی به int myint2 mylong
mylong خب این کار جواب نمی‌ده چون می‌تونه اطلاعات بیشتری نگه داره، اما می‌تونم با استفاده
کنم int قبلش، اونو به تبدیل cast از کلیدواژه
حالا شاید بپرسید چرا یکدفعه خطا از بین رفت.
و چطور این عدد بزرگ یهو داخل int دو ذخیره شد؟
خب حدس بزنید چی؟
در واقع نمی‌شه!
چون اگه بیایم از کنسول استفاده کنیم و مقدار int دو رو چاپ کنیم و برنامه رو ...
برنامه مون را اجرا کنیم
می‌بینید اینجا یه خط قرمز دارم.
حالا اگه برنامه رو اجرا کنیم، فقط یه عدد کوچیک‌تر شده نمایش می‌ده.
خب این عدد چیه؟
یه دفعه عدد کاملاً متفاوتیه.
نیست mylong number این
هم نیست int یه .
یه عدد بی‌ربط شده.
(explicit conversion) یعنی یه مشکلی توی تبدیل صریح اتفاق افتاده.
my long چون مقدار داخل خیلی بزرگ بوده.
my long خب اگه اونقدر بزرگ نباشه چی؟
int اگه فقط عددی باشه که توی محدوده جا بشه چی؟
حالا اگه این کارو بکنیم، می‌بینید که اطلاعات درست منتقل می‌شن.
اینجا my int که داریم نمایش می‌دیم، مقدار 1323450 رو نگه می‌داره که همون مقدار my long بوده.
my long ولی اگه دوباره یه بزرگ‌تر بذاریم...
می‌بینیم که درست جواب نمی‌ده.
یه عدد تصادفی ظاهر می‌شه که هیچ ربطی نداره.
البته هر بار همون عدد تکرار می‌شه، ولی دیگه اون عدد long واقعی نیست.
پس باید خیلی مراقب باشید وقتی که دارید از یه نوع به نوع دیگه cast می‌کنید.
مسئولیت با شماست که مطمئن بشید مقداری که دارید تبدیل می‌کنید واقعاً توی محدوده نوع مقصد جا بشه.
یعنی مقداری باشه که قابل نگهداری توی
اون نوع داده باشه که
بهش تبدیلش می‌کنید.
float و double خب حالا بیایم اینو با امتحان کنیم.
باشه.
دیدیم که می‌تونیم به راحتی تبدیل ضمنی انجام بدیم.
ولی حالا اگه بخوایم تبدیل هم امتحان کنیم، مثلاً از double به float؟
double یه تعریف می‌کنم و یه عدد طولانی بهش می‌دم.
تبدیل می کنیم cast با float بعد اون رو به
یعنی float رو به نوع داده double تبدیل کنم.
چون متغیرم از نوع float تعریف شده.
پس دارم double رو به float تبدیل می‌کنم.
اینم دوباره یه تبدیل صریح یا explicit conversion هست.
خب حالا اجراش کنیم.
میام با Console.WriteLine مقدار float رو چاپ می‌کنم.
float می‌بینید که فقط می‌تونه حدود هشت.
رقم نگه داره
یعنی هشت رقم به علاوه ممیز اعشاری.
پس بعد از این سه، بقیه‌اش رو قطع می‌کنه.
یعنی فقط تا همین‌جا رو نگه می‌داره.
نمی‌تونه مثل double اطلاعات بیشتری ذخیره کنه.
پس اون 123 آخر حذف می‌شه.
explicit conversion یعنی وقتی از استفاده می‌کنید، یا اطلاعات حذف می‌شن (اگه مقدار خیلی بزرگ باشه)،
یا توی اعداد اعشاری فقط بخشی از مقدار ذخیره می‌شه و.
بقیه قطع می‌شن
double اینجا همینطور می‌تونید از int به هم تبدیل کنید.
پس می‌تونم از تبدیل صریح استفاده کنم، جایی که مثلاً می‌گم int my int two مساوی int.
و اینجا میام مقدار my double رو قرار می‌دم.
اینم درست کار می‌کنه.
اینجا دارم int رو تعریف می‌کنم.
و اینجا فقط ازش استفاده می‌کنم.
پس اینم درست جواب می‌ده.
اینم یه تبدیل صریح یا همون casting هست.
داریم از یه نوع داده به نوع دیگه تبدیل می‌کنیم.
حالا همینطور می‌تونید از double به int هم تبدیل کنید.
با استفاده از تبدیل صریح.
پس اجازه بدید همه اینا رو پاک کنم و خیلی ساده‌تر نشونش بدم.
میام یه int جدید می‌سازم، اسمشو می‌ذارم my int 2 یا 3.
و یه double هم می‌سازم به اسم my double three.
و مثلاً مقدار 13.5 رو توش قرار می‌دم.
درسته.
و حالا میام my int 3 رو با مقداری که داخل double هست بازنویسی می‌کنم.
این به صورت عادی جواب نمی‌ده، چون double می‌تونه اطلاعات بیشتری نگه داره نسبت به int.
اما می‌تونم با استفاده از casting صریح، یعنی قرار دادن int داخل پرانتز، این تبدیل رو انجام بدم.
یعنی نوع داده‌ای که my int داره رو می‌ذارم و double سه رو به int تبدیل می‌کنم.
حالا اتفاقی که می‌افته اینه که هر چیزی بعد از ممیز حذف می‌شه.
پس اگه حالا با Console.WriteLine مقدار my int 3 رو چاپ کنم...
می‌بینید که خروجی فقط 13 می‌شه.
چون int فقط می‌تونه عدد صحیح نگه داره، ولی double می‌تونه اعشار هم ذخیره کنه.
پس با casting هر چی بعد از اعشار هست قطع می‌شه.
این شد casting یا تبدیل صریح به طور خاص.
و این هم پایان این ویدیو بود.
توی ویدیوی بعدی می‌بینمتون.