آموزش سی شارپ c# درس دوم

 
ارسال شده در تاریخ 1392/7/22 توسط admin در زمینه آموزش سی شارپ
 
درس دوم - عبارات، انواع و متغیرها در C#
 
در این درس به معرفی عبارات، انواع و متغیرها در زبان C# می پردازیم . هدف از این درس بررسی موارد زیر است :
• آشنایی با متغیرها
• فراگیری انواع (Types) ابتدایی در C#
• فراگیری و دری عبارات (Expressions) در C#
• فراگیری نوع رشتهای (String) در زبان C#
• فراگیری چگونگی استفاده از آرایه ها (Arrays) در زبان C#
متغیرها، به بیان بسیار ساده، مکانهایی جهت ذخیره اطلاعات هستن د . شما اطلاعاتی را در یک متغیر قر ار می دهید و از این اطلاعات بوسیله متغیر در عبارات C# استفاده مینمایید . کنترل نوع اطلاعات ذخیره شده در متغیرها بوسیله تعیین کردن نوع برای هر متغیر صورت می پذیرد .
C# زبانی بسیار وابسته به انواع است، بطوریکه تمامی عملیاتی که بر روی داده ها و متغیرها در این زبان انجام میگیرد با دانستن نوع آن متغیر میسر می باشد . قوانینی نیز برای تعیین اینکه چه عملیاتی بر روی چه متغیری انجام شود نیز وجود دارد ). بسته به نوع متغیر (
 
انوع ابتدایی زبان C# شامل : یک نوع منطقی (Boolean) و سه نوع عددی اعداد صحیح (integer) ، اعداد اعشار ی (Floating
points) و اعداد دسیما ل (Decimal) می باشد ). به انواع Boolean از اینرو منطقی می گوییم که تنها دارای دو حالت منطقی صحیح (True) و یا غلط (False) می باشند (.
 
مثال 1 - نشان دادن مقادیر منطقی (Boolean)
using System; class Booleans
{
public static void Main()
{
bool content = true; bool noContent = false;
Console.WriteLine("It is {0} that C# Persian provides C# programming language content.", content);
Console.WriteLine("The statement above is not {0}.", noContent);
}
}
در این مثال، مقادیر منطقی متغیر های Boolean به عنوان قسمتی از جمله در خروجی نمایش داده می شوند . متغیر های bool تنها می توانند یکی از دو مقدار true یا false را داشته باشند، یعنی همانند برخی از زبانهای برنامه سازی مشابه، مانند C و یا C++، مقدار عددی نمی پذیرند، ز یرا همانگونه که می دانید در این دو زبان هر مقدار عددی صحیح مثبت بغیر از صفر به عنوان true و عدد صفر به عنوان false در نظر گرفته میشود و در حقیقت نوع bool در این دو زبان نوعی integer می باشند . اما در زبان C# انواع bool یکی از دو مقدار true یا false را می پذیرند . خروجی برنامه بالا به صورت زیر است :
It is True that C# Persian provides C# programming language content.
 
The statement above is not False.
جدول زیر تمامی انواع عددی صحیح C# ، اندازه آنها و رنج قابل قبول آنها را نشان میدهد .
 
رنج قابل قبول اندازه به بیت نوع -128 تا sbyte 8 127 0 تا byte 8 255
-32768 تا short 32767 0 تا ushort 65535
-2147483648 تا int 32 2147483647 0 تا uint 4294967295
-9223372036854775808 تا long 64 9223372036854775807
0 تا ulong 64 18446744073709551615
از این ان واع برای محاسبات عددی استفاده می گردد . یک نوع دیگر را نیز می توان در این جدول اضافه نمود و آن نوع char است . هر چند شاید از نظر بسیاری از دوستانی که با زبانهای دیگر برنام هسازی کار کرده اند این تقسیم بندی غلط به نظر آید، اما باید گفت که در زبان C# نوع char نیز نوع خاصی از انواع عددی است که رنجی بین صفر تا 65535 دارد و اندازه آن نیز 16 بیتی است، اما به جای نمایش دادن مقادیر عددی تنها می تواند بیان کننده یک کاراکتر باش د . در آینده در این مورد بیشتر توضیح خواهم داد .
 
جدول زیر تمامی انواع عددی اعشاری زبان C# را نمایش می دهد .
 
رنج قابل قبول دقت اندازه به بیت نوع تا 7 رقم float 32 تا 16-15 رقم double 64
تا 29-28 رقم دسیمال decimal 128
 
انواعی از نوع floating point هنگامی استفاده می شوند که محاسبات عددی به دقتهای اعشاری نیاز داشته باشند . همچنین برای منظورهای تجاری استفاده از نوع decimal بهترین گزینه است . این نوع تنها در زبان C# وجود دارد و در زبانهای مشابه به آن نظیر Java چنین نوعی در نظر گرفته نشده است .
 
در یک زبان برنامه سازی نتایج بوسیله ایجاد یک سری عبارت تولید می گردند . عبار ات از ترکیب متغیرها و عملگرها در دستورالعمل های یک زبان ایجاد می گردند ). توجه نمایید که عبارت معادل expression و دستورالعمل معادل statement
می باشد که ایندو با یکدیگر متفاوت می باشند (. جدول زیر عملگرهای موجود در زبان C# ، حق تقدم آنها و شرکت پذیری آنها را نشان می دهد .
 

 

عمل انتساب
شرکت پذیری از چپ بدین معناست که عملیات از چپ به راست محاسبه می شوند . شرکتپذیری از راست بدین معناست که تمامی محاسبات از راست به چپ صورت می گیرند . به عنوان مثال در یک عمل تساوی، ابتدا عبارات سمت راست تساوی محاسبه شده و سپس نتیجه به متغیر سمت چپ تساوی تخصیص داده می شود .
 
مثال -2 عملگرهای یکانی (Unary)
using System; class Unary
{
public static void Main()
{
int unary = 0; int preIncrement; int preDecrement; int postIncrement; int postDecrement; int positive; int negative; sbyte bitNot; bool logNot;
preIncrement = ++unary;
Console.WriteLine("Pre-Increment: {0}", preIncrement);
 
preDecrement = --unary;
Console.WriteLine("Pre-Decrement: {0}", preDecrement); postDecrement = unary--;
Console.WriteLine("Post-Decrement: {0}", postDecrement); postIncrement = unary++;
Console.WriteLine("Post-Increment: {0}", postIncrement); Console.WriteLine("Final Value of Unary: {0}", unary); positive = -postIncrement;
Console.WriteLine("Positive: {0}", positive); negative = +postIncrement;
Console.WriteLine("Negative: {0}", negative); bitNot = 0;
bitNot = (sbyte)(~bitNot);
Console.WriteLine("Bitwise Not: {0}", bitNot); logNot = false; logNot = !logNot;
Console.WriteLine("Logical Not: {0}", logNot);
}
}
به هنگام محاسبه عبارات، دو عملگر x++ و -- ) x که در اینجا کاراکتر x بیان کننده آن است که عملگرهای ++ و - در جلوی عملوند قرار می گیرند post-increment و (post-decrement ابتدا مقدار فعلی عملوند (operand) خود را باز می گرداند و
سپس به عملوند خود یک واحد اضافه کرد ه یا از آن یک واحد می کاهند . عملگر ++ یک واحد به عملوند خود اضافه می کند و عملگر - یک واحد از عملوند خود می کاهد . بدین ترتیب عبارت x++ معادل است با عبارت x=x+1 و یا x+=1 اما همانطور که
گفته شد باید توجه داشته باشید که این عملگرها ++) و (-- ابتدا مقدار فعلی عملوند خود را برگشت می دهند و سپس عمل خود را روی آنها انجام می دهند . بدین معنی که در عبارت x=y++ در صورتیکه در ابتدای اجرای برنامه مقدار x=0 و y=1 باشد، در اولین اجرای برنامه مقدار x برابر با 1 یعنی مقدار y می شود و سپس به متغیر y یک واحد افزوده میشود، در صورتیکه اگر این عبارت را بصورت x=++y بنویسیم در اولین اجرای برنامه، ابتدا به مقدار متغیر y یک واحد افزوده می شود و سپس این مقدار به
متغیر x تخصیص داده می شود که در این حالت مقدار متغیر x برابر با 2 میشود ). در مورد عملگر - نیز چنین است (. پس با این توضیح می توان گفت که دو عملگر ++x و x - ابتدا به عملوند خود یک واحد اضافه یا یک واحد از آن کم می کنند و سپس مقدار آنها را باز می گردانند .
 
در مثال 2 ، مقدار متغیر unary در قسمت اعلان برابر با 0 قرار گرفته است . هنگامیکه از عملگر ++x استفاده می کنیم، به مقدار
متغیر unary یک واحد افزوده می شود و مقدارش برابر با 1 می گردد و سپس این مقدار، یعنی 1 ، به متغیر preIncrement تخصیص داده می شود . عملگر x - مقدار متغیر unary را به 0 باز می گرداند و سپس این مقدار را به متغیر preDecrement نسبت میدهد .
هنگامیکه از عملگر x-- استفاده م ی شود، مقدار متغیر unary ، یا همان مقدار صفر، به متغیر postDecrement تخصیص داده می شود و سپس از مقدار متغیر unary یک واحد کم شده و مقدار این متغیر به -1 تغییر میکند . سپس عملگر x++ مقدار متغیر unary، یعنی همان -1 ، را به متغیر postIncrement تخصیص می دهد و سپ س یک واحد به مقدار متغیر unary میافزاید تا مقدار این متغیر برابر با ) 0 صفر ( شود .
 
مقدار متغیر bitNot در هنگام اعلان برابر با صفر است . با استفاده از عملگر نقیض بیتی ) (~) یا عملگر مکم ل گیری ( متغیر bitNot بعنوان یک بایت در نظر گرفته می شود و مقدار آن منفی ی ا نقیض می شود . در عملیات بیتی نقیض بدین معناست که تمامی یکها به صفر و تمامی صفرها به یک تبدیل شون د . در این حالت نمایش باینری عدد صفر یا همان 00000000 به نقیض آن یعنی 11111111 تبدیل میگردد .
 
در این مثال به عبارت (sbyte)(~bitNot) توجه نمایید . هر عملی که ب ر روی انواع short ، unshort ، byte و sbyte انجام
شود، مقداری از نوع int را باز می گرداند . بمنظور اینکه بتوانیم نتیجه دلخواه را به متغیر bitNot تخصیص دهیم باید از فرمت (Type) operator استفاده نماییم که در آن Type نوعی ا ست میخواهیم نتیجه ما به آن نوع تبدیل شود و operator عملی است که بر روی متغیر صورت می پذیرد . به بیان دیگر چون می خواهیم مقدار متغیر bitNot بصورت بیتی در نظر گرفته شود، پس باید نتیجه عمل ما بصورت بیتی در آن ذخیره شود که استفاده از نوع sbyte باعث می شود تا نتیجه به فرم بیتی ) یا بایتی ( در متغیر ما ذخیره شود . باید توجه نمایید که استفاده از فرمت (Type) یا در اصطلاح عمل Casting ، در مواقعی که می خواهیم تغییری از یک نوع بزرگتر به نوع کوچکتر ایجاد نماییم، مورد استفاده قرار گیرد، چرا که در این حالات ممکن است با از دست دادن
اطلاعات مواجه باشیم . در این مثال چون می خواهیم نوع بزرگتر int را به 32) بیتی ( به نوع کوچکتر 8) sbyte بیتی ( تبدیل نماییم، بدین منظور باید بطور صریح از عمل Casting استفاده نماییم تا اطلاعاتی در این تبدیل از بین نرود . در مورد تبدیل انواع کوچکتر به انواع بزرگتر ) مثلا تبدیل sbyte به (int نیازی به استفاده از عمل Casting نیست چرا که امکان از بین رفتن اطلاعات وجود ندارد . در ضمن باید به یک نکته مهم توجه نمایید و آن تبدیل انواع علامتدار (Signed) و بدون علامت (Unsigned) به یکدیگر است . در این حالت خطر بسیار مهمی دا ده های شما را تهدید مینماید . بحث در مورد مسائل پیچید هتر در مورد تبدیل انواع
علامتدار و و بدون علامت به یکدیگر در اینجا نمی گنجد و سعی می کنم تا آنها را در مطالب بعدی و در جای لازم مورد بحث و بررسی قرار د هم ). در صورتیکه برخی از مطالب این قسمتها برای شما به خوبی قابل دری نیست، نگران نباشید چراکه د ر آینده در مثالهایی که خواهید دید تمامی این مطالب را در عمل نیز حس کرده و با آنها آشنا خواهید شد (.

 www.IranProje.com

Copyright © 2014 icbc.ir