مشخصات مقاله
-
4021
-
0.0
-
28058
-
0
-
0
تبدیل داده ها (type conversion) در سی شارپ
تبدیل مقادیر در سی شارپ - تبدیل ضمنی
از آنجا که سی شارپ زبانی حساس به گونه های داده ای برای متغیرها است، بایستی هنگام انتساب مقادیر داده ای متفاوت به یکدیگر گونه داده ای آن ها را در صورت امکان همسان نمود
با نحوه ی تعریف نوع های رشته، ممیز شناور و صحیح (integral) آشنا شدیم. طریقه ی مقداردهی اولیه ی آن ها نیز تشریح شد. در صورت داشتن برنامه ای که متغیرهای مختلفی در آن به کار گرفته شده، می توان مقدار یک متغیر را به (مقدار) متغیر دیگری تبدیل کرد. در درس 1 با مقدار حافظه ی مورد نیاز برای ذخیره سازی متغیر هر نوع داده آشنا شدیم.
همان طور که در جدول بالا مشاهده می کنید، مقدار یک متغیر Byte می تواند در مقدار حافظه ی تخصیص یافته برای متغیر int جای گیرد و سرانجام مقدار متغیر int خود در متغیر long قابلیت ذخیره شدن را دارد. بر این اساس، می توان مقدار یک Byte را به متغیر int اختصاص داد و یا متغیر int را به متغیر long. همچنین به این خاطر که حافظه ی رزرو شده برای متغیر 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...از این ویژگی با عنوان تبدیل ضمنی یاد می شود.
تبدیل صریح
به دلیل مقررات و الزامات حافظه، عکس فرایند تبدیل ضمنی امکان پذیر نمی باشد. به این خاطر که حافظه ی تخصیص یافته برای متغیر 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;
}
}
تبدیل مقادیر در سی شارپ - تبدیل ضمنی
بسیار مفید واقع شد ممنونم