کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

تبدیل داده ها (type conversion) در سی شارپ

وقتی توی C# با چند نوع داده مختلف کار می‌کنی، ممکنه بخوای مقدار یک متغیر رو داخل متغیری با نوع داده متفاوت قرار بدی. اینجاست که بحث تبدیل داده‌ها مطرح می‌شه. باید بدونی چه زمانی C# می‌تونه این تبدیل رو به‌صورت خودکار انجام بده و چه زمانی لازم هست خودت به‌صورت صریح نوع داده رو تبدیل کنی.

توی این مقاله با تبدیل ضمنی و تبدیل صریح در C# آشنا می‌شیم و می‌بینیم چطور می‌شه مقدار متغیرها رو بین انواع داده مختلف جابه‌جا کرد. در ادامه هم سراغ کلاس Convert می‌ریم و با نحوه استفاده از متدهای اون برای تبدیل داده‌ها آشنا می‌شیم.

آموزش سی شارپ - تبدیل داده ها در سی شارپتبدیل مقادیر در سی شارپ - تبدیل ضمنی


از اونجا که سی‌شارپ نسبت به نوع داده متغیرها حساسه، وقتی می‌خوای مقدار یک متغیر رو به متغیری با نوع داده متفاوت اختصاص بدی، باید نوع داده‌ها با هم سازگار باشن.

قبلاً با نوع‌های رشته، ممیز شناور و صحیح (integral) آشنا شدیم و نحوه مقداردهی اولیه اون‌ها رو هم بررسی کردیم. حالا فرض کن توی برنامه چند متغیر با نوع‌های مختلف داری و می‌خوای مقدار یکی از اون‌ها رو به نوع دیگه‌ای تبدیل کنی. در درس 1 هم دیدیم که هر نوع داده برای ذخیره شدن به مقدار مشخصی از حافظه نیاز داره.

جدول نمایش گونه های داده ای در سی شارپ
گونه داده ای
نام
اندازه حافظه
byte
Byte
8 بیت
sbyte
Signed Byte (بایت با علامت)
8 بیت
char
Character
16 بیت
short
Small Integer (عدد صحیح کوچک)
16 بیت
ushort
Unsigned Small Integer
16 بیت
int
Signed Integer(عدد صحیح علامت دار)
32 بیت
uint
Unsigned Integer(عدد صحیح بدون علامت)
32 بیت
float
Single-Precision Floating-Point Number (عدد با ممیز شناور با تنها یک رقم اعشار)
32 بیت
double
Double-Precision Floating-Point Number (عدد با ممیز شناور با دو رقم اعشار)
64 بیت
long
Signed Long Integer (عدد صحیح بزرگ علامت دار)
64 بیت
ulong
Unsigned Long Integer
64 بیت
decimal
Extended Precision Floating-Point Number(عدد ممیز اعشار با رقم اعشار طولانی)
128 بیت

همون‌طور که توی جدول بالا می‌بینی، مقدار یک متغیر 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 گرفته شده.

جدول نمایش ساختار گونه های داده ای در دات نت
گونه داده ای در سی شارپ
نام
ساختار در دات نت
bool
Boolean
Boolean
byte
Byte
Byte
sbyte
Signed Byte
SByte
char
Character
Char
short
Small Integer
Int16
ushort
Unsigned Small Integer
UInt16
int
Integer
Int32
uint
Unsigned Integer
UInt32
Long Integer
Long Integer
Int64
ulong
Unsigned Long Integer
UInt64
float
Single-Precision Floating-Point
Single
double
Double-Precision Floating-Point
Double
decimal
Extended Precision Floating-Point Number
Decimal
No Explicit Type
Date/Time Value
DateTime
string
String
String

برای هماهنگ کردن کلاس 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# می‌تونه قدم بعدی خوبی برای ادامه یادگیری برنامه‌نویسی با سی‌شارپ باشه.

1405/06/15 28484 4132
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...






آموزش برنامه نویسی کاربر میهمان 1396/02/16
perfect

بسیار مفید واقع شد ممنونم