این مقاله با بررسی مفاهیم تبدیل نوع خودکار و صریح، مثالهایی کاربردی ارائه داده و ابزارهای داخلی برای تبدیل نوع در سی شارپ #C را معرفی میکند. هدف، کمک به درک بهتر نحوه مدیریت انواع داده در زبان سیشارپ است.
در برنامهنویسی، انواع داده نقشی اساسی در مدیریت و ذخیرهسازی اطلاعات دارند. اگر میخواهید دربارهی انواع داده در سی شارپ بیشتر مطالعه کنید. کلیک کنید[+]
در زبان برنامهنویسی #C، گاهی اوقات نیاز است مقادیر یک نوع داده به نوعی دیگر تبدیل شوند. این فرآیند که به آن تبدیل نوع «Type Conversion» گفته میشود، به دو روش انجام میگیرد.
تبدیل نوع داده در سی شارپ
تبدیل نوع «Type Conversion» زمانی اتفاق میافتد که مقدار یک نوع داده به نوع دیگری اختصاص داده شود. اگر نوع دادهها با یکدیگر سازگار باشند، سی شارپ به طور خودکار تبدیل نوع «Automatic Type Conversion» را انجام میدهد. اما اگر ناسازگار باشند، باید بهصورت صریح تبدیل شوند که به آن تبدیل نوع صریح «Explicit Type Conversion» گفته میشود. بهعنوان مثال، اختصاص یک مقدار از نوع int به یک متغیر از نوع long.
تبدیل نوع ضمنی در سی شارپ
تبدیل نوع ضمنی یا تبدیل نوع خودکار زمانی رخ میدهد که:
- دو نوع داده با یکدیگر سازگار باشند.
- مقدار یک نوع داده کوچکتر به یک نوع داده بزرگتر اختصاص داده شود.
برای مثال، در #C، انواع دادهای عددی با یکدیگر سازگار هستند، اما هیچ تبدیل خودکاری از نوع عددی به char یا boolean پشتیبانی نمیشود. همچنین، char و boolean با یکدیگر سازگار نیستند. قبل از تبدیل، کامپایلر ابتدا سازگاری را طبق شکل زیر بررسی میکند و سپس تصمیم میگیرد که آیا تبدیل مجاز است یا خطایی وجود دارد.
مثال
// C# program to demonstrate the // Implicit Type Conversion using System; namespace Casting { class Pstore { // Main Method public static void Main(String []args) { int i = 57; // automatic type conversion long l = i; // automatic type conversion float f = l; // Display Result Console.WriteLine("Int value " +i); Console.WriteLine("Long value " +l); Console.WriteLine("Float value " +f); } } }
خروجی
Int value 57 Long value 57 Float value 57
تبدیل نوع صریح در سی شارپ
تبدیل نوع صریح فرآیندی است که در آن مقدار یک نوع داده را به نوع داده دیگری که بهطور ضمنی با آن سازگار نیست، تبدیل میکنیم. این کار زمانی ضروری است که احتمال از دست رفتن دادهها وجود داشته باشد یا کامپایلر نتواند بهطور خودکار تبدیل را انجام دهد.
بهعنوان مثال، زمانی که سعی میکنیم یک مقدار double را به نوع داده int اختصاص دهیم، در صورتی که این دو نوع با یکدیگر سازگار نباشند، منجر به خطای کامپایل خواهد شد.
// C# program to illustrate incompatible data // type for explicit type conversion using System; namespace Casting { class Pstore { // Main Method public static void Main(String []args) { double d = 765.12; // Incompatible Data Type int i = d; // Display Result Console.WriteLine("Value of i is ", +i); } } }
خطا
prog.cs(14,21): error CS0266: Cannot implicitly convert type `double' to `int'. An explicit conversion exists (are you missing a cast?)
بنابراین، اگر بخواهیم مقدار یک نوع داده بزرگتر را به یک نوع داده کوچکتر اختصاص دهیم، از تبدیل نوع صریح استفاده میکنیم.
این روش برای انواع داده ناسازگار مفید است که در آن تبدیل خودکار امکانپذیر نیست.
در اینجا، target-type نوع داده موردنظر را مشخص میکند که مقدار به آن تبدیل میشود.
گاهی اوقات این تبدیل ممکن است منجر به از دست دادن داده شود.
مثال
// C# program to demonstrate the // Explicit Type Conversion using System; namespace Casting { class Pstore { // Main Method public static void Main(String []args) { double d = 765.12; // Explicit Type Casting int i = (int)d; // Display Result Console.WriteLine("Value of i is " +i); } } }
خروجی
Value of i is 765
توضیح: در اینجا به دلیل تبدیل با از دست دادن داده «lossy conversion»، مقدار i به ۷۶۵ تبدیل میشود و مقدار ۰.۱۲ از دست میرود.
#C متدهای داخلی برای تبدیل نوع ارائه میدهد که به شرح زیر است:
متد | توضیحات |
ToBoolean | یک نوع را به مقدار بولین تبدیل میکند |
ToChar | یک نوع را به مقدار کاراکتری تبدیل میکند. |
ToByte | یک مقدار را به نوع Byte تبدیل میکند. |
ToDecimal | یک مقدار را به عدد اعشاری تبدیل میکند. |
ToDouble | یک نوع را به داده از نوع double تبدیل میکند. |
ToInt16 | یک نوع را به عدد صحیح ۱۶ بیتی تبدیل میکند. |
ToInt32 | یک نوع را به عدد صحیح ۳۲ بیتی تبدیل میکند. |
ToInt64 | یک نوع را به عدد صحیح ۶۴ بیتی تبدیل میکند. |
ToString | یک نوع داده را به رشته (String) تبدیل میکند. |
ToUInt16 | یک نوع را به عدد صحیح بدون علامت ۱۶ بیتی تبدیل میکند. |
ToUInt32 | یک نوع را به عدد صحیح بدون علامت ۳۲ بیتی تبدیل میکند. |
ToUInt64 | یک نوع را به عدد صحیح بدون علامت ۶۴ بیتی تبدیل میکند. |
مثال
// C# program to demonstrate the // Built- In Type Conversion Methods using System; namespace Casting { class Pstore { // Main Method public static void Main(String []args) { int i = 12; double d = 765.12; float f = 56.123F; // Using Built- In Type Conversion // Methods & Displaying Result Console.WriteLine(Convert.ToString(f)); Console.WriteLine(Convert.ToInt32(d)); Console.WriteLine(Convert.ToUInt32(f)); Console.WriteLine(Convert.ToDouble(i)); Console.WriteLine("ProgramStore"); } } }
خروجی
۵۶.۱۲۳ ۷۶۵ ۵۶ ۱۲ ProgramStore
جمعبندی
درک نحوه تبدیل نوع داده در سی شارپ یکی از مهارتهای اساسی برای توسعهدهندگان است. تبدیل نوع به دو روش خودکار و صریح انجام میشود که هرکدام کاربردها و محدودیتهای خاص خود را دارند.
تبدیل نوع خودکار زمانی مفید است که سازگاری بین انواع داده وجود داشته باشد و احتمال از دست رفتن داده وجود نداشته باشد. اما در مواردی که نیاز به تبدیل دادههای ناسازگار یا کاهش اندازه نوع داده باشد، از تبدیل نوع صریح استفاده میشود که ممکن است منجر به از دست رفتن بخشی از داده شود.
همچنین، ابزارها و متدهای داخلی #C فرآیند تبدیل نوع را سادهتر و قابل اطمینانتر میکنند. با درک صحیح این مفاهیم و استفاده مناسب از آنها، توسعهدهندگان میتوانند کدهایی پایدارتر و بهینهتر بنویسند که از خطاهای احتمالی جلوگیری کرده و عملکرد برنامه را بهبود بخشند.
مطالب آموزنده و عالی است
متشکر