آموزش #C – بخش پنجم | کاراکترهای کنترلی و تبدیل انواع در سی شارپ

انواع تبدیل در #C

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

کاراکترهای کنترلی در سی شارپ

این کاراکترها باعث تغییر فرمت نمایش رشته می‌شوند و از یک بک‌اسلش ” \ ” و یک کاراکتر تشکیل می‌شوند. در جدول زیر لیست کاراکترهای کنترلی در سی شارپ را مشاهده می‌کنید.

جدول کاراکترهای کنترلیکاراکتر های بالا را در چند مثال شرح می‌دهیم.

فرق بین دو تابع ()Console.WriteLine و ()Console.Write این است که اولی به آخر هر رشته ورودی، کاراکتر کنترلی n\ را اضافه می‌کند و مکان‌نما را به ابتدای خط بعد می‌بَرد.

Console.WriteLine("First line\nSecond line");
First line
Second line
Console.WriteLine("Ali\tNasr");
Ali     Nasr
Console.WriteLine("AAA\rBBB");
BBB
Console.WriteLine("\"C# Tutorials\"");
"C# Tutorials"
Console.WriteLine("ABB\bC");
ABC
Console.WriteLine("\u0024  \u0025");
$  %

از کاراکتر کنترلی u\ برای چاپ کاراکتر یونیکد استفاده می‌شود. توجه داشته باشید که کد در مبنای 16 را بعد u\ قرار دهیم.

کاراکتر @

استفاده از این کاراکتر قبل از رشته باعث می‌شود کامپایلر کاراکتر های کنترلی را در نظر نگیرد.

 Console.WriteLine("cat\dog ?");   //Error

کد بالا باعث ایجاد خطای کامپایلری می‌شود چون کامپایلر d\ این کاراکتر کنترلی را نمی‌شناسد. و باید از کاراکتر @ استفاده کنیم.

 Console.WriteLine(@"cat\dog ?");
cat\dog ?

کاربرد دیگر این نوع از کاراکترهای کنترلی در سی شارپ ، استفاده در رشته های چند خطی است بدون استفاده از n\ است.

Console.WriteLine(@"C# is a simple & powerful object-oriented programming language developed by Microsoft.
C# can be used to create various types of applications,
such as web, windows, console applications or
other types of applications using Visual studio.");
C# is a simple & powerful object-oriented programming language developed by Microsoft.
C# can be used to create various types of applications,
such as web, windows, console applications or
other types of applications using Visual studio.

فقط کافی است هرجا که می‌خواهید به خط بعد بروید از Enter استفاده کنید.

تبدیل ضمنی

این نوع تبدیل توسط کامپایلر به طور اتوماتیک انجام می‌شود. یک متغیر به طور ضمنی می‌تواند به دیگری تبدیل شود اگر تعداد بایتش کمتر از آن نوع باشد. در جدول زیر انواع داده‌هایی را می‌بینید که کامپایلر می‌تواند آن‌ها را به یکدیگر تبدیل کند.

تبدیل ضمنی

در زیر چند مثال مشاهده می‌کنید.

byte numberByte = 10;
int numberInt = 5;
numberInt = numberByte;
Console.WriteLine(numberInt);
Console.WriteLine(numberByte);
10
10

طبق گفته‌های بالا چون تعداد بایت‌های نوع byte کمتر از int می‌باشد، این تبدیل انجام شده است. اگر خط سوم مثال بالا را عکس کنیم به خطا بر می‌خوریم. توجه داشته باشید که نمی‌توانیم اعداد اعشاری (یا به بیان بهتر، اعداد از نوع ممیز شناور) را به انواع صحیح تبدیل کنیم چون بخش اعشار آن‌ها حذف می‌شود.

decimal d = 10.89M;
int a0 = d;    //Error
uint a1 = d;   //Error
long a2 = d;   //Error
short a3 = d;  //Error

تبدیل صریح

تبدیل صریح یا cast نوعی از تبدیل است که برنامه را مجبور به تبدیل می‌کند. این تبدیل خطرناک است و ممکن است باعث اصلاح و یا حذف مقادیر شود و نیاز به دقت زیادی دارد. ساختار پایین نحوه تبدیل صریح را نشان می‌دهد.

type1 var1 = val;
type2 var2 = (type2)var1;

در بالا چگونگی تبدیل متغیر var1 از نوع type1 به نوع type2 را مشاهده می‌کنید. به مثال‌های زیر توجه کنید.

int varInt = 56;
byte varByte = (byte)varInt;
Console.WriteLine(varByte);
56

باید توجه داشته باشید که فقط هشت بیت اول متغیر varInt در varByte کپی می‌شود. بنابراین همانطور که مثال زیر نشان می‌دهد اگر مقدار متغیر varInt بیشتر از 255 باشد مقدار کپی شده در varByte متفاوت خواهد بود.

int varInt = 256;
byte varByte = (byte)varInt;
Console.WriteLine(varByte);
 0

تبدیل مقادیر از نوع اعشاری به نوع صحیح باعث حذف بخش اعشاری عدد می‌شود.

float varFloat = 43256.76F;
int varInt = (int)varFloat;
Console.WriteLine(varInt);
43256

برای اینکه ما از وقوع سرریز با خبر شویم باید از کلمه کلیدی checked استفاده کرد. در قالب یک مثال این نکته را شرح می‌دهیم.

int numInt = 0;
byte numByte = 0;
for (int i = 250; i < 260; i++)
{
    numInt = i;
    numByte = checked((byte)numInt);
    Console.WriteLine(numByte);
}
250
251
252
253
254
255

Unhandled Exception: System.OverflowException: Arithmetic operation resulted in an overflow.

برنامه بالا سعی می‌کند مقادیر 250 تا 260 را در متغیر varByte قرار دهد. اما طبق گفته‌هایمان متغیر از نوع byte اعداد 0 تا 255 را می‌پذیرد بنابراین هنگامی که عدد 256 را در ورودی می‌بیند، کلمه کلیدی checked استثنای سرریز را پرتاب می‌کند.

کلاس convert

این کلاس دارای متدهایی است که می‌توانند برای تبدیل انواع به یکدیگر استفاده شوند. برخی از این متدها را در جدول زیر مشاهده می‌کنید.

کلاس convert

decimal x = 18.26m;
int convertedX = Convert.ToInt16(x);
Console.WriteLine(convertedX);
18

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

اگر علاقه‌مند به برنامه‌نویسی هستید می‌تونید از آموزش‌های مختلف ما در این زمینه استفاده کنید. برای آموزش‌های بیشتر با رزدینو همراه باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *