انواع متغیر و نوع داده در سی شارپ
انواع متغیرها در سی شارپ
در زبان سی شارپ متغیرها نامهایی هستند که جهت نگهداری دادهها انتخاب میشوند. در مثال زیر message نام متغیری است که عبارت “Hello World!!” را در خود ذخیره کرده است. در ادامه با متغیرها در سی شارپ بیشتر آشنا میشویم.
namespace CSharpTutorials
{
class Program
{
static void Main(string[] args)
{
string message = "Hello World!!";
Console.WriteLine(message);
}
}
}
مقدار متغیرها
به خاطر داشته باشید که مقدار متغیرها، همانگونه که از نام آن نیز مشخص است، قابل تغییر بوده و میتوان آن را در هر جا که لازم بود تغییر داد.
برای تعیین انواع متغیرها در سی شارپ همیشه باید از نوع داده یا همان Data type استفاده کنیم. برای تعیین Data type در برنامه نویسی سی شارپ از الگوی دستوری زیر استفاده خواهیم کرد:
<data type> <variable name>;
<datatype> <variable name> = <value>;
متغیرها در سی شارپ
در زبان c# می توان متغیر را بدون مقدار تعریف کرد و بعدا از آن استفاده کرده و آن را مقدار دهی گردد. همچنین میتوان همزمان با تعیین Data type، مقدار متغیر را نیز مشخص کرد.
در مثال زیر، ابتدا متغیری با نام message را تعریف میکنیم و هیچ مقداری به آن نسبت نمیدهیم. در خط بعدی مقدار این متغیر را تعیین میکنیم:
string message;
message = "Hello World!!";
در مثال زیر تعیین نوع داده و مقدار دهی به متغیر را به صورت همزمان انجام میدهیم:
string message = "Hello World!!";
اگر بخواهیم چند متغیر با نوع داده یکسان را در سی شارپ مشخص کنیم می توانیم از دستور زیر استفاده کنیم:
int i, j, k, l = 0;
int amount, num;
زمانی که چند متغیر با نوع داده یکسان تعیین میکنیم میتوانیم هر متغیر را در یک سطر جداگانه بنویسیم تا خواندن آن راحتتر شود. در زبان برنامه نویسی سی شارپ تا زمانی که از سمیکالن (;) استفاده نکرده باشیم دستور به پایان نرسیده و برای کامپایلر تمامی متن یک خط محسوب میشود. مثال:
Int i,
j,
k,
l = 0;
همچنین میتوان مقدار یک متغیر را به متغیر دیگری با همان نوع داده نسبت داد:
int i = 100;
int j = i;
در دستور بالا مقدار i مساوی با 100 می باشد. در سطر دوم به برنامه دستور میدهیم که مقدار i را در j قرار دهد. بنابراین j نیز مقدار 100 را در خود ذخیره خواهد کرد.
به خاطر داشته باشید که اگر بخواهیم مقدار متغیری را در متغیر دیگر قرار دهد، باید قبلا به متغیر اول مقدار داده باشیم در غیر این صورت کامپایلر خطا خواهد داد.
انواع Data type
زبان سی شارپ یکی از زبانهای سطح بالا است که در دسته زبان های نوعدهی نیرومند قرار دارد. زبان نوعدهی نیرومند به این معنی است که باید نوع متغیر را مشخص کنیم و با این کار مقادیر مجاز برای یک متغیر تعیین می شود.
در اینجا مثالی برای نحوه تعیین نوع داده در سی شارپ بیان میکنیم:
string stringVar = “Hello World!!”;
int intVar = 100;
float floatVar = 10.2f;
char charVar = 'A';
bool boolVar = true;
به طور کلی نوع داده در سی شارپ به دو دسته تقسیم می شود. این دو دسته عبارتند از داده های مشخص و داده های ارجاعی. داده های مشخص عبارتند از داده های ساده ای مثل int، Float، bool و char، داده های enum، struct، داده های NULL. داده های ارجاعی نیز شامل داده های Class، Interface، Delegate و array میباشد.
داده های مشخص
زمانی که یک مقدار به طور مستقیم در یک داده ذخیره شود به آن داده مشخص گفته میشود. همانند تصویر زیر:
داده های ارجاعی در متغیرهای سی شارپ
همانطور که از نام این نوع داده مشخص است، این متغیرها در سی شارپ اطلاعات را مستقیما در خود ذخیره نمی کنند. بلکه محلی از حافظه که داده در آنجا ذخیره شده را در خود نگه می دارند. مثال:
نوع دادهها قبلا در کتابخانههای سی شارپ تعیین شدهاند. در اینجا به بررسی برخی از انواع Data type ها میپردازیم:
Byte
این نوع داده اعداد صحیح بین 0 تا 255 را در خود ذخیره کرده و 8 بیت فضا در حافظه را اشغال میکند.
Sbyte
این نوع داده میتواند اعداد بین -128 تا +128 را در 8 بیت حافظه ذخیره کند.
Short
این نوع داده اعداد صحیح بین -32768 تا +32768 را در خود ذخیره کرده و 16 بیت فضا در حافظه را اشغال میکند.
Int
این نوع داده اعداد صحیح بین -2147483648 تا +2147483648 را در خود ذخیره کرده و 32 بیت فضا در حافظه را اشغال میکند.
Uint
این نوع داده اعداد صحیح بین 0 تا +4294967295 را در خود ذخیره کرده و 32 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند u استفاده شود.
Long
این نوع داده اعداد صحیح بین -9223372036854 تا +9223372036854 را در خود ذخیره کرده و 64 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند l استفاده شود. برای نمایش اعداد بزرگ در سی شارپ از این نوع داده استفاده می شود.
Ulong
این نوع داده اعداد صحیح بین 0 تا +18446744073709551615 را در خود ذخیره کرده و 64 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند ul استفاده شود
Float
این نوع داده اعداد اعشاری بین – 3.402823e38 تا +3.402823e38 را در خود ذخیره کرده و 32 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند f استفاده شود
Double
این نوع داده اعداد اعشاری بین -1.79769313486232e308 تا +1.79769313486232e308 را در خود ذخیره کرده و 64 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند d استفاده شود
تفاوت بین Float و Double در این است که Float تا 7 رقم اعشاری را می تواند در خود ذخیره کند اما Double می تواند 14 الی 15 رقم اعشاری را در خود ذخیره کند.
Decimal
یکی دیگر از روش های نمایش داده ها با نوع اعشاری در C#، استفاده از Decimal است. این نوع داده اعداد اعشاری در بازه مثبت و منفی 1.0 x 10e-28 تا مثبت و منفی 7.9 x 10e28 را در خود ذخیره کرده و 128 بیت فضا در حافظه را اشغال می کند. در هنگام کد نویسی نیز باید از پسوند m استفاده شود.
این نوع داده بیشتر برای کارهای حسابداری مورد استفاده قرار می گیرد و می تواند 28 الی 29 رقم اعشار دقت داشته باشد. اما نسبت به Double و Float رنج کمتری دارد.
نکته: حرف e یا E زمانی که با نوع داده اعشاری همراه شده باشند نشان دهنده به توان 10 می باشد. مثال:
double d = 0.12e2;
Console.WriteLine(d); // 12;
float f = 123.45e-2f;
Console.WriteLine(f); // 1.2345
decimal m = 1.2e6m;
Console.WriteLine(m);// 1200000
برای گرد کردن تا دو رقم اعشار در سی شارپ از روش زیر استفاده می کنیم:
using System;
class GFG {
public static void Main()
{
Try
{
decimal value = 7922816251426433759354.39503305M;
decimal round = Decimal.Round(value, 2);
Console.WriteLine("Rounded value is {0}", round);
}
catch (ArgumentOutOfRangeException e)
{
Console.WriteLine("decimal place is not within bound");
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
خروجی
Rounded value is 7922816251426433759354.3
همانطور که در مثال مشاهده می کنید برای گرد کردن اعداد اعشاری از دستور Decimal.Round استفاده می کنیم که در سطر 8 نوشته شده است. گرد کردن ارقام اعشاری تا هر تعداد امکان پذیر است تنها کافی است در دستور Decimal.Round(value, 2) به جای عدد 2، عدد دلخواه خود را بنویسید.
به طور خلاصه تر دسته بندی نوع داده های عددی در سی شارپ به شکل زیر است.
Char
با استفاده از این نوع داده می توان کاراکتر های یونیکد را در 16 بیت حافظه ذخیره کرد.
String
در زبان سی شارپ Srting برای نمایش یک سری کاراکتر استفاده می شود که در نهایت به یک متن تبدیل خواهد شد. این نوع داده مجموعه ای از کاراکتر های یونیکد را در خود ذخیره کرده و به نسبت تعداد کاراکترها، فضا اشغال می کند. مثال:
string ch = "S";
string word = "String";
string text = "This is a string.";
در واقع یک String می تواند یک حرف، یک کلمه یا یک متن باشد که در بین دو علامت نقل قول یا کوتیشن(“) نوشته می شود. بیشترین مقداری که می
توان برای یک String در نظر گرفت 2G حافظه یا یک میلیار کاراکتر می باشد. برای تعیین نوع داده string دو روش وجود دارد که از هر دو هم می توان استفاده کرد. روش اول با استفاده از system.string و روش دوم استفاده از واژه کلیدی String است. علاوه بر این باید به خاطر داشته باشید که به دلیل استفاده سی شارپ از کاراکتر های خاص، نمی توان آنها را در داخل متن String قرار داد. مثال:
string text = "This is a "string" in C#.";
با توجه به اینکه مقدار متغیر با نوع داده String در داخل کوتیشن ها قرار می گیرد، نمی توان در داخل متن دوباره از کوتیشن استفاده کرد. در این صورت کامپایلر خطا خواهد داد. برای اعمال برخی دستورات در داخل یک متغیر string می توان از \ استفاده کرد. این دستوران عبارتند از \،\n،\r،\t و … مثال:
string text = "This is a \"string\" in C#.";
اما نوشتن کاراکتر های خاص با استفاده از \ کمی خسته کننده و سخت است. برای بهبود این امر از @ استفاده می شود. استفاده از @ به عنوان پیشوند به این معنی است که این خط یک string می باشد و هیچ کاراکتری نباید از آن حذف شود.
Bool
تنها توانایی ذخیره مقادیر منطقی را دارد یعنی مقدار متغیر آن تنها می تواند True یا false باشد که 8 بیت حافظه را اشغال خواهد کرد.
Object
این نوع داده می تواند تمامی مقادیر و عبارت ها را در خود ذخیره کند.
Datetime
با استفاده از این نوع داده می توان تاریخ و زمان را در بازه ای بین00:00:ق.ظ 1/1/01تا11:59:ب.ظ 12/31/9999 ذخیره کرد. مثال:
1. DateTime dt1 = new DateTime();
//assigns year, month, day
2. DateTime dt2 = new DateTime(2019, 12, 31);
//assigns year, month, day, hour, min, seconds
3. DateTime dt3 = new DateTime(2019, 12, 31, 5, 10, 20);
//assigns year, month, day, hour, min, seconds, UTC timezone
4. DateTime dt4 = new DateTime(2019, 12, 31, 5, 10, 20, DateTimeKind.Utc);
- دستور اول مقدار تاریخ ذخیره شده در متغیر را به مقدار پیش فرض تغییر میدهد.
- در دستور دوم یک تاریخ مشخص (سال، ماه و روز) در متغیر ذخیره میشود.
- در دستور سوم علاوه بر تاریخ، ساعت، دقیقه و ثانیه نیز ثبت میشود.
- با استفاده از دستور چهارم علاوه بر مشخص کردن زمان دقیق می توان از محدوده زمانی نیز استفاده کرد.
همانطور که مشاهده کردید اغلب مقادیر دارای رنج مشخصی هستند. اگر مقداری که برای متغیرها مشخص شده خارج از بازه آن نوع داده باشد، در این صورت کامپایلر حین اجرای دستور، خطا خواهد داد. برای مثال رنج داده Byte بین 0 تا 255 است. اگر مقدار تعیین شده برای متغیر با نوع داده byte برابر با 256 باشد، کامپایلر خطا خواهد داد.
گفتیم که برای نوشتن مقادیر متغیرهای uint، long، ulong، float، double و decimalباید از پسوند استفاده شود. برای درک بهتر این موضوع به مثال های زیر دقت کنید:
uint ui = 100u;
float fl = 10.2f;
long l = 45755452222222l;
ulong ul = 45755452222222ul;
double d = 11452222.555d;
decimal mon = 1000.15m;
نحوه تعریف متغیرها در سی شارپ
متغیر سراسری چیست؟
متغیری است که در هر قسمت از برنامه بتوان به آن دسترسی داشت. میتوان از هر کلاس یا تابعی به آن متغیر دسترسی پیدا کرد.
از آنجایی که زبان برنامه نویسی سی شارپ جزو زبان های شی گرا است، نمی توان به طور مستقیم در آن متغیر سراسری تعریف کرد.
برای حل این مشکل ابتدا یک کلاس استاتیک تعریف میکنیم و متغیر های سراسری را در داخل آن کلاس قرار میدهیم. استفاده از متغیر سراسری با قوانین شی گرایی سازگاری ندارد اما در برخی مواقع بسیار کاربردی است.
تفاوت بین کلاس و کلاس استاتیک
در کلاس استاتیک تمام اعضا باید به صورت ایستا تعریف شوند و برای دسترسی به اعضای آن نیازی به نمونه کلاس نیست. به عبارت دیگر دسترسی به اعضای کلاس تنها با استفاده از نام کلاس و عملگر نقطه میسر میشود.
برای درک بهتر موضوع از یک مثال استفاده می کنیم تا روش ایجاد یک کلاس استاتیک و نحوه تعریف متغیر سراسری در سی شارپ نیز مشخص گردد:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GlobalVarDemo
{
class Bread
{
public int counter;
}
static class Butter
{
public static int counter;
}
class Program
{
static void Main(string[] args)
{
// بیان نمونه از کلاس الزامی است
Bread a = new Bread();
a.counter = 5;
Console.WriteLine("Bread: " + a.counter);
//نمونه آوری وجود ندارد نیازی به
Butter.counter = 5;
Console.WriteLine("Butter: " + Butter.counter);
}
}
}
همانطور که در مثال بالا مشاهده میکنید برای ایجاد یک کلاس استاتیک قبل از کلمه Class از واژه Static استفاده میکنیم. امیدوارم مقاله متغیرها در سی شارپ تا اینجا مفید واقع شده باشد.
خیلی ممنون
عالی و کامل بود