PDA

View Full Version : سوال: تفاوت Cast و Convert



OmMiD_MtWo
یک شنبه 27 مهر 1393, 10:33 صبح
با سلام خدمت دوستان عزیز

میخواستم بپرسم تفاوت بین Cast کردن و Convert کردن در سی شارپ چی هست؟ از نظر تعریف و مفهوم
از پاسختون هم پیشاپیش تشکر میکنم:لبخندساده:

gerdioz
یک شنبه 27 مهر 1393, 10:57 صبح
این دستورات در اس کیو ال هست
http://stackoverflow.com/questions/3166840/what-is-the-difference-between-casting-and-conversion
http://www.beyamooz.com/sql/132-function/327-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-convert-%D9%88-cast-%D8%AF%D8%B1-sql

hamid_hr
یک شنبه 27 مهر 1393, 11:24 صبح
خب تو c# هم هست
تفاوتش این دو تا رو بگین

gerdioz
یک شنبه 27 مهر 1393, 11:47 صبح
http://alaasabzpoush.blogsky.com/category/cat-9
http://stackoverflow.com/questions/15394032/difference-between-casting-and-using-the-convert-to-method
http://sarvan.mihanblog.com/post/116

elec60
یک شنبه 27 مهر 1393, 15:29 عصر
با سلام خدمت دوستان عزیز

میخواستم بپرسم تفاوت بین Cast کردن و Convert کردن در سی شارپ چی هست؟ از نظر تعریف و مفهوم
از پاسختون هم پیشاپیش تشکر میکنم:لبخندساده:

بحثش طولانيه ولي يه مثال ميزنم:

اگه عدد 12.8 رو به int كست (cast) كني كامپايلر مياد و 12 رو برميداره و اعشار رو دور ميريزه و حاصل ميشه 12 و نوعي Truncate انجام ميشه
اما اگه ConvetToInt32 كني به عدد 13 گرد ميشه.


حالا بستگي به كاربردت داره. اگه دقت مهمه cast نكن ولي اگه دقت مهم نيست cast بهتره چون محاسبه اي نميكنه و قسمت اعشار رو ميريزه دور


اين مثال فقط براي Type عدد بود ولي بحث كلي تر از اين حرفاست

تو بحث cast ما دو نوع داريم: Up Casting و Down casting كه هر كدوم رو بايد مفصل توضيح داد.

اگه همين قدر كفايت ميكنه كه هيچ، در غير اينصورت ميتونم كامل توضيح بدم

OmMiD_MtWo
یک شنبه 27 مهر 1393, 17:33 عصر
بحثش طولانيه ولي يه مثال ميزنم:

اگه عدد 12.8 رو به int كست (cast) كني كامپايلر مياد و 12 رو برميداره و اعشار رو دور ميريزه و حاصل ميشه 12 و نوعي Truncate انجام ميشه
اما اگه ConvetToInt32 كني به عدد 13 گرد ميشه.


حالا بستگي به كاربردت داره. اگه دقت مهمه cast نكن ولي اگه دقت مهم نيست cast بهتره چون محاسبه اي نميكنه و قسمت اعشار رو ميريزه دور


اين مثال فقط براي Type عدد بود ولي بحث كلي تر از اين حرفاست

تو بحث cast ما دو نوع داريم: Up Casting و Down casting كه هر كدوم رو بايد مفصل توضيح داد.

اگه همين قدر كفايت ميكنه كه هيچ، در غير اينصورت ميتونم كامل توضيح بدم

متشکرم دوست عزیز، من میخواستم مفهوم این دو رو متوجه شم. اگه امکانش هست کمی بیشتر توضیح بدید. ممنون

juza66
یک شنبه 27 مهر 1393, 17:58 عصر
casting and conversion

آموزش:
http://iranvatn.blogfa.com/post-7.aspx


فیلم
http://www.aparat.com/v/lu8tD/0014_%D8%A2%D9%85%D9%88%D8%B2%D8%B4_%D8%A8%D8%B1%D 9%86%D8%A7%D9%85%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB %8C_%D8%B3%DB%8C_%D8%B4%D8%A7%D8%B1%D9%BE_-_%D8%A8%D8%AE%D8%B4_%D8%A7%D9%88%D9%84%3A_%D9%85%D 9%82%D8%AF%D9%85%D8%A7%D8%AA

rahnema1
یک شنبه 27 مهر 1393, 21:36 عصر
اگه منظور شما از convert همون تبدیل باشه می تونیم از دو نوع تبدیل نام ببریم: تبدیل ضمنی و تبدیل صریح. تبدیل ضمنی مثل انواع تبدیلی که از طریق انتساب یک مقدار به مقدار دیگه میتونه انجام بشه مثلا یک مقدار byte به int تبدیل بشه

byte a = 12;
int b = a;

تبدیل صریح عبارت است از انواع تبدیل ضمنی همچنین تبدیلهایی که با تبدیل ضمنی قابل انجام نباشه مثل تبدیل int به byte که این نوع تبدیلها توسط cast انجام میشه

int b = 12;
byte a = (byte)b;

اما cast کردن همیشه موفقیت آمیز نیست یا ممکنه موجب از دست رفتن اطلاعات بشه
مثل این تبدیل

int a = 345;
byte b = (byte) a;

اگه منظور شما از Convert همون کلاس System.Convert باشه، Convert همون cast هست به اضافه اینکه در Convert میتونیم از استثناها exception استفاده کنیم

مهرداد صفا
سه شنبه 29 مهر 1393, 10:19 صبح
با سلام.
در ظاهر خیلی شبیه به هم هستند و ممکنه گاها در لغت و کارایی به جای یکدیگر استفاده بشن؛ ولی میشه تفاوتهایی رو از نظر مفهومی در موردشون بیان کرد.
میشه گفت چیزی که ازش به عنوان Cast یاد میشه فرض کردن یک type، به عنوان type دیگه ای هست (البته این تعریف بیشتر implicit cast رو شامل میشه).
به عنوان مثال اگر شما داده ای از نوع Char با مقدار '1' رو، به نوع Int دو بایتی Cast کنید حاصل عدد 49 خواهد بود!! و این به دلیل اینه که در کدگذاری ascii کاراکتر '1' رو با یک بایت به مقدار 49 کد می کنند و Cast عینا همین ساختار بایتی رو به عنوان Int در نظر میگیره و هیچ پردازش خاصی روش انجام نمیده؛ در حالیکه اگر شما همین مقدار '1' رو با Convert کردن به Int تبدیل کنید، مقدار عددی 1 رو خواهید داشت، به دلیل اینکه انتظار میره تا در Convert عملیات خاصی برای تبدیل مقدار یک نوع، به مقدار مناسب خودش در نوع دیگر صورت بگیره.

در Cast کمتر عملیات خاصی انجام میشه در حالی که ممکنه Convert نیاز به عملیات برای تبدیل یک Type به type دیگری رو داشته باشه.
با Cast می تونید Type های هم خانواده رو با هم تبدیل کنید ولی در Convert ممکنه دو Type کاملا متفاوت رو به هم تبدیل کنید و یا یک مقدار رو به یک مقدار دیگه از همون type تبدیل کنید (مثل تبدیل string به base64 و یا تبدیل عکس رنگی به سیاه و سفید).
برای مثال اگر شما یک object از نوع Bitmap رو بخواهید به Image تبدیل کنید در واقع یک Cast کرده اید ولی مثلا اگر یک Bitmap رو با عملیاتی شبیه به OCR تبدیل به متن کنید، مفهوم Convert رو پیاده سازی کردید.
در Cast شما محدود تر خواهید بود، چرا که باید دو نوع هم خانواده داشته باشیم (مثل Int و long) و یا دو نوع از نظر ساختار باینری شبیه به هم باشند (مثل Char و Int16) و یا تبدیل فرزند به پدر(Boxing) و یا بر عکس(unboxing)؛ در حالیکه Convert علاوه بر اینکه مفهوم Cast رو پوشش میده، بلکه میتونه هر چیزی رو به هر چیز دیگری تبدیل کنه.
با این تفاسیر رشته "1234" هرگز و به هیچ وجه به یک int16 قابل Cast نیست و همچنین عدد مثلا 16 به رشته "16 هیچ وقت Cast نمیشه، چرا که ساختار کاملا متفاوتی دارند (اگر چه از نظر ظاهری داده های متشابهی داشته باشند)؛ و این در حالیه که Convert کردن یک رشته به عدد و بر عکس یک امر بسیار معمول و پر کاربرد به شمار میاد.

موفق باشید!

elec60
پنج شنبه 01 آبان 1393, 22:13 عصر
البته تبدیل فرزند به پدر و برعکس، Boxing و UnBoxing محسوب نمیشه بلکه UpCasting و DownCasting محسوب میشه.
اگر نوع مقداری به نوع ارجاعی تبدیل بشه در واقع Boxing انجام میشه و برعکسش UnBoxing