درود به همراهان سایت رزدینو به ویژه علاقهمندان به زبان #C. در بخش قبل این آموزش، ساختار تصمیم و شروط که جزء پایههای هر زبان برنامهنویسی هستند را بررسی کردیم. در این بخش میخواهیم به شرح کاراکترهای کنترلی در سی شارپ و همچنین تبدیل نوع در این زبان بپردازیم.
کاراکترهای کنترلی در سی شارپ
این کاراکترها باعث تغییر فرمت نمایش رشته میشوند و از یک بکاسلش ” \ ” و یک کاراکتر تشکیل میشوند. در جدول زیر لیست کاراکترهای کنترلی در سی شارپ را مشاهده میکنید.
کاراکتر های بالا را در چند مثال شرح میدهیم.
فرق بین دو تابع ()Console.WriteLine و ()Console.Write این است که اولی به آخر هر رشته ورودی، کاراکتر کنترلی n\ را اضافه میکند و مکاننما را به ابتدای خط بعد میبَرد.
1 2 |
Console.WriteLine("First line\nSecond line"); |
1 2 3 |
First line Second line |
1 2 |
Console.WriteLine("Ali\tNasr"); |
1 2 |
Ali Nasr |
1 2 |
Console.WriteLine("AAA\rBBB"); |
1 2 |
BBB |
1 2 |
Console.WriteLine("\"C# Tutorials\""); |
1 2 |
"C# Tutorials" |
1 2 |
Console.WriteLine("ABB\bC"); |
1 2 |
ABC |
1 2 |
Console.WriteLine("\u0024 \u0025"); |
1 2 |
$ % |
از کاراکتر کنترلی u\ برای چاپ کاراکتر یونیکد استفاده میشود. توجه داشته باشید که کد در مبنای 16 را بعد u\ قرار دهیم.
کاراکتر @
استفاده از این کاراکتر قبل از رشته باعث میشود کامپایلر کاراکتر های کنترلی را در نظر نگیرد.
1 2 |
Console.WriteLine("cat\dog ?"); //Error |
کد بالا باعث ایجاد خطای کامپایلری میشود چون کامپایلر d\ این کاراکتر کنترلی را نمیشناسد. و باید از کاراکتر @ استفاده کنیم.
1 2 |
Console.WriteLine(@"cat\dog ?"); |
1 2 |
cat\dog ? |
کاربرد دیگر این نوع از کاراکترهای کنترلی در سی شارپ ، استفاده در رشته های چند خطی است بدون استفاده از n\ است.
1 2 3 4 5 |
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."); |
1 2 3 4 5 |
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 استفاده کنید.
تبدیل ضمنی
این نوع تبدیل توسط کامپایلر به طور اتوماتیک انجام میشود. یک متغیر به طور ضمنی میتواند به دیگری تبدیل شود اگر تعداد بایتش کمتر از آن نوع باشد. در جدول زیر انواع دادههایی را میبینید که کامپایلر میتواند آنها را به یکدیگر تبدیل کند.
در زیر چند مثال مشاهده میکنید.
1 2 3 4 5 6 |
byte numberByte = 10; int numberInt = 5; numberInt = numberByte; Console.WriteLine(numberInt); Console.WriteLine(numberByte); |
1 2 3 |
10 10 |
طبق گفتههای بالا چون تعداد بایتهای نوع byte کمتر از int میباشد، این تبدیل انجام شده است. اگر خط سوم مثال بالا را عکس کنیم به خطا بر میخوریم. توجه داشته باشید که نمیتوانیم اعداد اعشاری (یا به بیان بهتر، اعداد از نوع ممیز شناور) را به انواع صحیح تبدیل کنیم چون بخش اعشار آنها حذف میشود.
1 2 3 4 5 6 |
decimal d = 10.89M; int a0 = d; //Error uint a1 = d; //Error long a2 = d; //Error short a3 = d; //Error |
تبدیل صریح
تبدیل صریح یا cast نوعی از تبدیل است که برنامه را مجبور به تبدیل میکند. این تبدیل خطرناک است و ممکن است باعث اصلاح و یا حذف مقادیر شود و نیاز به دقت زیادی دارد. ساختار پایین نحوه تبدیل صریح را نشان میدهد.
1 2 3 |
type1 var1 = val; type2 var2 = (type2)var1; |
در بالا چگونگی تبدیل متغیر var1 از نوع type1 به نوع type2 را مشاهده میکنید. به مثالهای زیر توجه کنید.
1 2 3 4 |
int varInt = 56; byte varByte = (byte)varInt; Console.WriteLine(varByte); |
1 2 |
56 |
باید توجه داشته باشید که فقط هشت بیت اول متغیر varInt در varByte کپی میشود. بنابراین همانطور که مثال زیر نشان میدهد اگر مقدار متغیر varInt بیشتر از 255 باشد مقدار کپی شده در varByte متفاوت خواهد بود.
1 2 3 4 |
int varInt = 256; byte varByte = (byte)varInt; Console.WriteLine(varByte); |
1 2 |
0 |
تبدیل مقادیر از نوع اعشاری به نوع صحیح باعث حذف بخش اعشاری عدد میشود.
1 2 3 4 |
float varFloat = 43256.76F; int varInt = (int)varFloat; Console.WriteLine(varInt); |
1 2 |
43256 |
برای اینکه ما از وقوع سرریز با خبر شویم باید از کلمه کلیدی checked استفاده کرد. در قالب یک مثال این نکته را شرح میدهیم.
1 2 3 4 5 6 7 8 9 |
int numInt = 0; byte numByte = 0; for (int i = 250; i < 260; i++) { numInt = i; numByte = checked((byte)numInt); Console.WriteLine(numByte); } |
1 2 3 4 5 6 7 8 9 |
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
این کلاس دارای متدهایی است که میتوانند برای تبدیل انواع به یکدیگر استفاده شوند. برخی از این متدها را در جدول زیر مشاهده میکنید.
1 2 3 4 |
decimal x = 18.26m; int convertedX = Convert.ToInt16(x); Console.WriteLine(convertedX); |
1 2 |
18 |
خب دوستان این بخش هم که در مورد کاراکترهای کنترلی در سی شارپ و البته بحث تبدیل نوع بود، به پایان رسید. امیدوارم مفید واقع شده باشه همچنین مبحث بعدی انواع عملگرها میباشد. هرگونه سؤالی در مورد این مطلب و یا در مورد مطالب دیگهی آموزش #C داشتید در بخش کامنتها مطرح کنید تا ما در اسرع وقت پاسخگوی شما باشیم.
اگر علاقهمند به برنامهنویسی هستید میتونید از آموزشهای مختلف ما در این زمینه استفاده کنید. برای آموزشهای بیشتر با رزدینو همراه باشید.