انواع تبدیل نوع ها در سی شارپ
سلام ، امیدوارم عالی باشی . من پوریا منتخبم و تو این مقاله میخوام انواع تبدیل ها یا Type Conversion رو برات توضیح بدم اما بهت پیشنهاد میدم قبلش حتما مقاله قواعد و استانداردهای نام گذاری متغیر ها در سی شارپ رو بخون
-
تبدیل نوع ضمنی یا به عبارتی Implicit Type Conversion
-
تبدیل نوع صریح یا Explicit Type Conversion
-
تبدیل نوع غیر سازگاز Non-compatible Type conversion
تبدیل ضمنی
بریم ببینیم تبدیل ضمنی به چه صورته . به تصویر زیر نگاه کن :
همونطور که میدونیم هر بایت تشکیل شده از 8 بیت . ما اینجا متغیر b رو از نوع byte در نظر گرفتیم و مقدار 1 رو درونش قرار دادیم . که به عبارتی اولین بیت از سمت راست عدد 1 و مابقی بیت ها تا انتها با 0 مقدار دهی شدن و یه متغیر دیگه داریم از نوع int که 4 بایت هست و متغیر b رو بهش اساین کردیم البته در کدنویسی به این صورت با خطا مواجه میشیم و این مثال رو زدم تا درکش برات آسون تر باشه .
زمانی که b رو درون متغیر i قرار میدیم ، چون متغیر b از نوع byte با ظرفیت 1 بایت هست درون متغیر i قرار میگیره و مابقی بیت ها با 0 مقدار دهی میشن . ینی اون 24 بیت سمت چپش با 0 مقدار دهی میشن .
نکته مهم : دراین روش ثبدیل data lost نداریم ینی داده ای در هنگام تبدیلمون از بین نمیره .
تبدیل صریح
حالا همین مثال بالا رو برعکس در نظر بگیریم . به عکس زیر نگاه کن :
تو این حالت تبدیل زمانی که مقدار int رو درون byte قرار دادیم ، سه بایت از اطلاعاتمون برای اینکه بتونه تو متغیر b قرار بگیره از بین رفت . حذف داده هامون در این روش به صورت همیشگی نیست و فقط زمانیه که مقدار متغیر مبدا از ظرفیت متغیر مقصد بیشتر باشه . تو این مثال بایت هایی که حذف شدن همه صفر بودن اما این یه مثال بود ممکنه عدد ما بزرگتر باشه و در این صورت دیگه بیت هایی حذف خواهند شد که دارای مقدار بیشتر از 0 هستن .
تواین روش تبدیل به خاطر اینکه کامپایلر میدونه data lost اتفاق میفته به همین دلیل به صورت مستقیم مثل حالت implicit اجازه نمیده تبدیل رو انجام بدیم و باید به کامپایلر بفهمونیم که آقا مشکلی نیست ، میدونم و میخوام انجام بشه.پس برای اینکه بهش بفهمونیم باید نوع مد نظرمون که میخوایم بهش تبدیل بشه رو درون پرانتز ذکر کنیم :
int i =1;
byte = (byte) i;
به این روش تبدیل Casting هم گفته میشه . خیلی هم باکلاس تره 😊 . یه مثال دیگه هم از Casting داشته باشیم :
تبدیل نوع غیر سازگار
خیلی وقتا شده که یه عدد رو در قالب رشته در نظر می گیریم و میخوایم اون رو به نوع عددی خودش تبدیل کنیم ، با اینکه میدونیم اون یه عدده اما در حقیقت به عنوان یه رشته به کامپایلر معرفی شده و کامپایلر ما اون رو به عنوان یه نوع رشته ای میشناسه . تو این جور مواقع که می خوایم نوه رشته ای رو به عددی تبدیل کنیم چون نوع هاشون با هم سازگار نیستن نمیتونیم از روش Casting استفاده کنیم . خب پس به یه مکانیزم جدید نیاز داریم .
C# برای ما یه سری کلاس هایی نوشته که ما بتونیم خیلی راحت این ناممکن رو ممکن کنیم . چطوری ؟ با استفاده از کلاس ها ی Convert و متد Parse . به تصویر زیر نگاه کن :
برای این که متغیر رشته ای s رو به نوع عددی تبدیل کنیم از کلاس Convert و متد ToInt32 استفاده کردیم که بخشی از کلاس های از پیش تعریف شده .Net Framework هستش و در فضای نام System قابل دسترسیه.نوع Int32 از انواع تعریف شده در .Net Framework هست که توسط کامپایلر مپ میشه به نوع عددی متناظر خودش که همون int هست .
کلاس Convert شامل مجموعه ای از متد هاست که برای تبدیل انواع مختلف بکار برد میشه و همشون هم با To شروع میشن .متد Parse برای تمام انواع Primitive ها از قبیل integer , long , float , Booleanقابل اجراس. این متد نازنین یه مقدار رشته ای رو میگیره و اون رو به نوع مد نظرمون تبدیل میکنه .
امیدوارم این مقاله برات مفید بوده باشه . در مورد Type Conversion ها تو زبان برنامه نویسی C# هر سوالی داری پایین همین پست ازم بپرس .
منبع : سلسله آمورش های جناب Mosh hamedan