با سلام خدمت دوستان عزیز
میخواستم بپرسم تفاوت بین Cast کردن و Convert کردن در سی شارپ چی هست؟ از نظر تعریف و مفهوم
از پاسختون هم پیشاپیش تشکر میکنم
با سلام خدمت دوستان عزیز
میخواستم بپرسم تفاوت بین Cast کردن و Convert کردن در سی شارپ چی هست؟ از نظر تعریف و مفهوم
از پاسختون هم پیشاپیش تشکر میکنم
این دستورات در اس کیو ال هست
http://stackoverflow.com/questions/3...and-conversion
http://www.beyamooz.com/sql/132-func...8%AF%D8%B1-sql
خب تو C# هم هست
تفاوتش این دو تا رو بگین
بحثش طولانيه ولي يه مثال ميزنم:
اگه عدد 12.8 رو به int كست (cast) كني كامپايلر مياد و 12 رو برميداره و اعشار رو دور ميريزه و حاصل ميشه 12 و نوعي Truncate انجام ميشه
اما اگه ConvetToInt32 كني به عدد 13 گرد ميشه.
حالا بستگي به كاربردت داره. اگه دقت مهمه cast نكن ولي اگه دقت مهم نيست cast بهتره چون محاسبه اي نميكنه و قسمت اعشار رو ميريزه دور
اين مثال فقط براي Type عدد بود ولي بحث كلي تر از اين حرفاست
تو بحث cast ما دو نوع داريم: Up Casting و Down casting كه هر كدوم رو بايد مفصل توضيح داد.
اگه همين قدر كفايت ميكنه كه هيچ، در غير اينصورت ميتونم كامل توضيح بدم
casting and conversion
آموزش:
http://iranvatn.blogfa.com/post-7.aspx
فیلم
http://www.aparat.com/v/lu8tD/0014_%...85%D8%A7%D8%AA
اگه منظور شما از 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 استفاده کنیم
با سلام.
در ظاهر خیلی شبیه به هم هستند و ممکنه گاها در لغت و کارایی به جای یکدیگر استفاده بشن؛ ولی میشه تفاوتهایی رو از نظر مفهومی در موردشون بیان کرد.
میشه گفت چیزی که ازش به عنوان 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 کردن یک رشته به عدد و بر عکس یک امر بسیار معمول و پر کاربرد به شمار میاد.
موفق باشید!
آخرین ویرایش به وسیله مهرداد صفا : سه شنبه 29 مهر 1393 در 10:49 صبح
چشم ظاهر گر نبیند عیب نیست چشم دل گر ننگرد باید گریست**********اَلسَّلامُ عَلَى الْحُسَيْنِ وَ عَلى عَلِىِّ بْنِ الْحُسَيْنِ وَ عَلى اَوْلادِ الْحُسَيْنِ وَ عَلى اَصْحابِ الْحُسَيْنِ
البته تبدیل فرزند به پدر و برعکس، Boxing و UnBoxing محسوب نمیشه بلکه UpCasting و DownCasting محسوب میشه.
اگر نوع مقداری به نوع ارجاعی تبدیل بشه در واقع Boxing انجام میشه و برعکسش UnBoxing