مشخصات مقاله
-
4132
-
0.0
-
28484
-
0
-
0
تبدیل داده ها (type conversion) در سی شارپ
وقتی توی C# با چند نوع داده مختلف کار میکنی، ممکنه بخوای مقدار یک متغیر رو داخل متغیری با نوع داده متفاوت قرار بدی. اینجاست که بحث تبدیل دادهها مطرح میشه. باید بدونی چه زمانی C# میتونه این تبدیل رو بهصورت خودکار انجام بده و چه زمانی لازم هست خودت بهصورت صریح نوع داده رو تبدیل کنی.
توی این مقاله با تبدیل ضمنی و تبدیل صریح در C# آشنا میشیم و میبینیم چطور میشه مقدار متغیرها رو بین انواع داده مختلف جابهجا کرد. در ادامه هم سراغ کلاس Convert میریم و با نحوه استفاده از متدهای اون برای تبدیل دادهها آشنا میشیم.
تبدیل مقادیر در سی شارپ - تبدیل ضمنی
از اونجا که سیشارپ نسبت به نوع داده متغیرها حساسه، وقتی میخوای مقدار یک متغیر رو به متغیری با نوع داده متفاوت اختصاص بدی، باید نوع دادهها با هم سازگار باشن.
قبلاً با نوعهای رشته، ممیز شناور و صحیح (integral) آشنا شدیم و نحوه مقداردهی اولیه اونها رو هم بررسی کردیم. حالا فرض کن توی برنامه چند متغیر با نوعهای مختلف داری و میخوای مقدار یکی از اونها رو به نوع دیگهای تبدیل کنی. در درس 1 هم دیدیم که هر نوع داده برای ذخیره شدن به مقدار مشخصی از حافظه نیاز داره.
همونطور که توی جدول بالا میبینی، مقدار یک متغیر Byte میتونه داخل حافظهای که برای متغیر int در نظر گرفته شده قرار بگیره و همینطور مقدار متغیر int هم میتونه در متغیر long ذخیره بشه. بنابراین میتونیم مقدار Byte رو به int اختصاص بدیم یا مقدار int رو به long. از طرف دیگه، چون حافظه موردنیاز int از double بیشتر نیست، میتونیم مقدار متغیر int رو هم به متغیر double اختصاص بدیم. مثال زیر رو ببین.
using System;
class Program
{
static int Main()
{
int iNumber = 2445;
double dNumber = iNumber;
Console.WriteLine("Number = {0}", iNumber);
Console.WriteLine("Number = {0}\n", dNumber);
return 0;
}
}
نتیجه
Number = 2445 Number = 2445 Press any key to continue...این نوع تبدیل رو تبدیل ضمنی مینامیم؛ یعنی C# بدون اینکه لازم باشه خودت کاری انجام بدی، تبدیل رو انجام میده.
تبدیل صریح
حالا اگر بخوایم برعکس عمل کنیم، همیشه امکان تبدیل ضمنی وجود نداره. مثلاً حافظهای که برای متغیر short در نظر گرفته میشه، از حافظه موردنیاز int کمتره؛ بنابراین نمیتونیم مقدار یک متغیر int رو بهصورت مستقیم داخل short قرار بدیم. برنامه زیر رو ببین.
using System;
class Program
{
static int Main()
{
int iNumber = 168;
short sNumber = iNumber;
Console.WriteLine("Number = {0}", iNumber);
Console.WriteLine("Number = {0}\n", sNumber);
return 0;
}
}
با خطای زیر مواجه میشید.
Cannot implicitly convert type 'int' to 'short'.
تبدیل نوع یعنی اینکه یک مقدار رو از یک نوع داده به نوع داده دیگه تبدیل کنیم. مثلاً یک مقدار integer داریم و میخوایم اون رو در عبارتی استفاده کنیم که مقدار short نیاز داره. در این شرایط از تبدیل صریح استفاده میکنیم. برای انجام این کار، نوع دادهای که میخوایم مقدار به اون تبدیل بشه رو قبل از مقدار موردنظر و داخل پرانتز مینویسیم.
مثال:
using System;
class Program
{
static int Main()
{
int iNumber = 168;
short sNumber = (short)iNumber;
Console.WriteLine("Number = {0}", iNumber);
Console.WriteLine("Number = {0}\n", sNumber);
return 0;
}
}
نتیجه زیر به دست میاد:
Number = 168 Number = 168 Press any key to continue...
موقع استفاده از تبدیل صریح، باید حواست به نوع دادهای که میخوای مقدار رو به اون تبدیل کنی باشه. مثلاً اگر میخوای مقدار integer رو به short اختصاص بدی، مقدار موردنظر باید در 16 بیت جا بشه؛ یعنی باید در محدوده عددی -32768 تا 32767 قرار داشته باشه. اگر مقدار خارج از این محدوده باشه، نتیجه تبدیل میتونه غیرقابل پیشبینی باشه.
using System;
class Program
{
static int Main()
{
int iNumber = 680044;
short sNumber = (short)iNumber;
Console.WriteLine("Number = {0}", iNumber);
Console.WriteLine("Number = {0}\n", sNumber);
return 0;
}
}
نتیجه زیر به دست میاد.
Number = 680044 Number = 24684 Press any key to continue...همونطور که میبینی، این بار نتیجه درست و مورد انتظار نیست.
کلاس Convert
نتیجه زیر به دست میاد. در درس 13 و 32 توضیح داده خواهد شد که هر نوع داده زبان C#، که خودش از ساختار .NET Framework اقتباس شده، مجهز به متد ToString() هست و میتونه مقدار نوع داده رو به نوع String تبدیل کنه. البته تا اینجا درباره تبدیل یک مقدار از یک نوع اولیه (primitive type) به نوع اولیه دیگه صحبت نکردیم. برای پشتیبانی از این امکان، .NET Framework کلاسی به نام Convert در اختیارمون قرار میده. این کلاس چندین متد ایستا داره و در این مبحث قرار نیست همه اونها رو بررسی کنیم. فقط یادت باشه که هر نوع داده اولیه در C# از .NET Framework گرفته شده.
برای هماهنگ کردن کلاس Convert با نوع دادههای C#، این کلاس چند متد ایستا داره که نامشون با To شروع میشه و در ادامه اسم ساختار مربوط به .NET Framework میاد. این متدها به عنوان آرگومان، مقداری رو میگیرن که باید تبدیل بشه. مثلاً برای تبدیل یک مقدار double به int میتونیم متد ToInt32() رو صدا بزنیم و متغیر double رو به عنوان آرگومان بهش بدیم. شکل کلی این دستور به صورت زیره.
// Method signature only public static int ToInt32(double value);
مثال:
using System;
class Profram
{
static int Main(}
{
int iNumber = 34987;
double dNumber = Convert.ToDouble(iNumber);
Console.WriteLine("Number = {0}\n", iNumber);
Console.WriteLine("Number = {0}\n", dNumber);
Console.ReadKey();
return 0;
}
}
اگر میخوای یادگیری C# رو جدیتر و اصولیتر ادامه بدی، بعد از اینکه با مفاهیمی مثل انواع داده و تبدیل مقادیر آشنا شدی، میتونی مسیر یادگیریت رو با یک آموزش منسجم ادامه بدی. دوره آموزش C# میتونه قدم بعدی خوبی برای ادامه یادگیری برنامهنویسی با سیشارپ باشه.
تبدیل مقادیر در سی شارپ - تبدیل ضمنی
بسیار مفید واقع شد ممنونم