تبدیل نوع در زبان برنامه نویسی سی شارپ

انواع تبدیل نوع ها در سی شارپ

تخمین مدت زمان مطالعه : 5 دقیقه
  • سطح مقاله : مقدماتی
  • نویسنده : پوریا منتخب

سلام ، امیدوارم عالی باشی . من پوریا منتخبم و تو این مقاله میخوام انواع تبدیل ها یا Type Conversion رو برات توضیح بدم اما بهت پیشنهاد میدم قبلش حتما مقاله قواعد و استانداردهای نام گذاری متغیر ها در سی شارپ  رو بخون

  • تبدیل نوع ضمنی یا به عبارتی Implicit Type Conversion

  • تبدیل نوع صریح یا Explicit Type Conversion

  • تبدیل نوع غیر سازگاز       Non-compatible Type conversion

 

تبدیل ضمنی

بریم ببینیم تبدیل ضمنی به چه صورته . به تصویر زیر نگاه کن :

implicit type conversion یا تبدیل ضمنی در سی شارپ

همونطور که میدونیم هر بایت تشکیل شده از 8 بیت . ما اینجا متغیر b رو از نوع byte  در نظر گرفتیم و مقدار 1 رو درونش قرار دادیم . که به عبارتی اولین بیت از سمت راست عدد 1 و مابقی بیت ها تا انتها با 0 مقدار دهی شدن و یه متغیر دیگه داریم از نوع int   که 4 بایت هست و متغیر b رو بهش اساین کردیم البته در کدنویسی به این صورت با خطا مواجه میشیم و این مثال رو زدم تا درکش برات آسون تر باشه .

زمانی که b رو درون متغیر i قرار میدیم ، چون متغیر b  از نوع byte با ظرفیت 1 بایت هست درون متغیر i قرار میگیره و مابقی بیت ها با 0 مقدار دهی میشن . ینی اون 24 بیت سمت چپش با 0 مقدار دهی میشن .

نکته مهم : دراین روش ثبدیل data lost   نداریم ینی داده ای در هنگام تبدیلمون از بین نمیره .

 

تبدیل صریح

حالا همین مثال بالا رو برعکس در نظر بگیریم . به عکس زیر نگاه کن :

explicit type conversion یا تبدیل صریح در سی شارپ

تو این حالت تبدیل زمانی که مقدار int  رو درون byte  قرار دادیم ، سه بایت از اطلاعاتمون برای اینکه بتونه تو متغیر b  قرار بگیره از بین رفت  . حذف داده هامون در این روش به صورت همیشگی نیست و فقط زمانیه که مقدار متغیر مبدا از ظرفیت متغیر مقصد بیشتر باشه . تو این مثال بایت هایی که حذف شدن همه صفر بودن اما این یه مثال بود ممکنه عدد ما بزرگتر باشه و در این صورت دیگه بیت هایی حذف خواهند شد که دارای مقدار بیشتر از 0 هستن .

تواین روش تبدیل به خاطر اینکه کامپایلر میدونه data lost  اتفاق میفته به همین دلیل به صورت مستقیم مثل حالت implicit اجازه نمیده تبدیل رو انجام بدیم و باید به کامپایلر بفهمونیم که آقا مشکلی نیست ، میدونم و میخوام انجام بشه.پس برای اینکه بهش بفهمونیم باید نوع مد نظرمون که میخوایم بهش تبدیل بشه رو درون پرانتز ذکر کنیم :

int i =1;
byte = (byte) i;

به این روش تبدیل Casting هم گفته میشه . خیلی هم باکلاس تره 😊 . یه مثال دیگه هم از Casting  داشته باشیم :

explicit type conversion or casting تبدیل صریح در سی شارپ

تبدیل نوع غیر سازگار

خیلی وقتا شده که یه عدد رو در قالب رشته در نظر می گیریم و میخوایم اون رو به نوع عددی خودش تبدیل کنیم ، با اینکه میدونیم اون یه عدده اما در حقیقت به عنوان یه رشته به کامپایلر معرفی شده و کامپایلر ما اون رو به عنوان یه نوع رشته ای میشناسه . تو این جور مواقع که می خوایم نوه رشته ای رو به عددی تبدیل کنیم چون نوع هاشون با هم سازگار نیستن نمیتونیم از روش Casting  استفاده کنیم . خب پس به یه مکانیزم جدید نیاز داریم .

C# برای ما یه سری کلاس هایی نوشته که ما بتونیم خیلی راحت این ناممکن رو ممکن کنیم . چطوری ؟ با استفاده از کلاس ها ی Convert   و متد Parse  . به تصویر زیر نگاه کن :

non-compatible type conversion یا تبدیل نوع غیر سازگار در سی شارپ

برای این که متغیر رشته ای s رو به نوع عددی تبدیل کنیم از کلاس Convert و متد ToInt32 استفاده کردیم که بخشی از کلاس های از پیش تعریف شده .Net Framework هستش  و در فضای نام System  قابل دسترسیه.نوع Int32 از انواع تعریف شده در .Net Framework هست که توسط کامپایلر مپ میشه به نوع عددی متناظر خودش که همون int هست .

کلاس Convert  شامل مجموعه ای از متد هاست که برای تبدیل انواع مختلف بکار برد میشه و همشون هم با To شروع میشن .متد Parse برای تمام انواع Primitive  ها  از قبیل  integer , long , float , Booleanقابل اجراس. این متد نازنین یه مقدار رشته ای رو میگیره و اون رو به نوع مد نظرمون تبدیل میکنه .

 

امیدوارم این مقاله برات مفید بوده باشه . در مورد  Type Conversion ها تو زبان برنامه نویسی C#  هر سوالی داری پایین همین پست ازم بپرس . 

منبع : سلسله آمورش های جناب Mosh hamedan