انواع داده ها در سی شارپ
انواع داده ها در سی شارپ به سه دسته تقسیم بندی می شوند و موقع تعریف یک متغیر در سی شارپ باید یکی از این سه دسته را به عنوان نوع انتخاب کنیم.
متغیرها در سی شارپ به صورت زیر تقسیم می شوند:
- Value types
- Reference types
- Pointer types
نوع ارزش (Value Type)
متغیر ها یا نوع های Value Type از کلاس System.ValueType مشتق شده اند و می توانند به طور مستقیم مقدار دهی شوند. متغیر هایی که از نوع int، float و char تعریف می شوند، همگی Value Type هستند. زمانی که شما یک متغیر از نوع int تعریف می کنید، سیستم مقداری از حافظه را برای ذخیره سازی مقدار این متغیر در نظر می گیرد.
در جدول زیر لیست نوع هایی که از دسته Value Type هستند را مشاهده می کنید:
نوع | مقداری که ذخیره می کند | محدوده | مقدار پیشفرض |
bool | Boolean value | True or False | False |
byte | 8-bit unsigned integer | 0 to 255 | 0 |
char | 16-bit Unicode character | U +0000 to U +ffff | ‘\0’ |
decimal | 128-bit precise decimal values with 28-29 significant digits | (-7.9 x 1028 to 7.9 x 1028) / 100to 28 | 0.0M |
double | 64-bit double-precision floating point type | (+/-)5.0 x 10-324 to (+/-)1.7 x 10308 | 0.0D |
float | 32-bit single-precision floating point type | -3.4 x 1038 to + 3.4 x 1038 | 0.0F |
int | 32-bit signed integer type | -2,147,483,648 to 2,147,483,647 | 0 |
long | 64-bit signed integer type | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 0L |
sbyte | 8-bit signed integer type | -128 to 127 | 0 |
short | 16-bit signed integer type | -32,768 to 32,767 | 0 |
uint | 32-bit unsigned integer type | 0 to 4,294,967,295 | 0 |
ulong | 64-bit unsigned integer type | 0 to 18,446,744,073,709,551,615 | 0 |
ushort | 16-bit unsigned integer type | 0 to 65,535 | 0 |
برای فهمیدن اندازه دقیق یک نوع یا یک متغیر در یک پلت فرم خاص، می توانید از متد sizeof استفاده کنید. دستور sizeof(type)، مقدار حافظه ای که برای ذخیره سازی شیء یا نوع لازم است را بر حسب byte برمی گراند.
مثال زیر مقدار حافظه اختصاص داده شده به نوع int را نشان می دهد:
1 2 3 4 5 6 7 8 9 | using System; namespace DataTypeApplication { class Program { static void Main(string[] args) { Console.WriteLine("Size of int: {0}", sizeof(int)); Console.ReadLine(); } } } |
زمانی که کد بالا توسط کامپایلر سی شارپ کامپایل و اجرا شود نتیجه زیر را مشاهده خواهید کرد:
1 | Size of int: 4 |
نوع ارجاع (Reference Type)
متغیر ها و نوع های Reference Type مقداری را در خود ذخیره نمی کنند، بلکه آدرس داده ها را در خود نگه داری می کنند (یعنی به محلی از حافظه که داده ها ذخیره شده اند، اشاره می کنند). اگر داده های موجود در محلی از حافظه توسط یک متغیر تغییر یابد، این تغییرات به طور خودکار در سایر متغیرها نیز اعمال می شود (یعنی مقدار جدید را نشان می دهند).
چند نمونه از Reference Type های درون ساخت در زبان برنامه نویسی سی شارپ:
- object
- dynamic
- string
1- نوع داده Object
نوع داده Object، کلاس پایه نهایی برای همه انواع داده در CTS (Common Type System) می باشد. Object نام مستعار کلاس System.Object می باشد. متغیری که از نوع object تعریف شود، می تواند توسط انواع داده های دیگر (مانند Value Type، Reference Type و نوع های تعریف شده توسط کاربر) مقدار دهی شود. با این حال، قبل از مقدار دهی باید تبدیل شوند. زمانی که یک Value Type به Object Type تبدیل می شود، به آن boxing می گویند. و زمانی که یک Object Type به Value Type تبدیل می شود، به آن unboxing گفته می شود.
1 2 3 | object obj; obj = 100; // this is boxing |
2- Dynamic Type (نوع داده پویا)
شما می توانید هر نوع داده ایی را در متغیر های dynamic ذخیره کنید. نوع داده ذخیره شده در متغیر هایی که به صورت dynamic تعریف می شوند، در هنگام اجرا مشخص می شود. یعنی اگر مقدار 100 را در متغیر ذخیره کنید، نوع متغیر در لحظه اجرا int می شود، یا اگر مقدار “test” ذخیره کنید، نوع متغیر در لحظه اجرا string می شود.
مثالی از نوع داده dynamic:
1 | dynamic d = 20; |
نوع داده dynamic شبیه به نوع داده object می باشد اما نوع مقدار ذخیره شده در نوع object در هنگام کامپایل تعیین می شود ولی در نوع dynamic در هنگام اجرای برنامه مشخص می شود.
3- نوع داده String
نوع داده String برای ذخیره هر مقدار رشته ای، استفاده می شود. نوع داده String نام مستعار کلاس System.String می باشد و از نوع Object مشتق شده است. مقداری که برای این نوع داده مشخص می شود، به دو صورت زیر مشخص می شود:
1 | String str = "This is a test"; |
و
1 | String str = @"This is a test"; |
تمامی کلاس ها، interface ها و delegate های تعریف شده توسط کاربر از نوع داده reference می باشند.
نوع اشاره گر (Pointer types)
نوع داده اشاره گر آدرس محل حافظه یک نوع دیگر را در خود نگهداری می کند. تمامی قابلیت هایی که اشاره گرها در زبان C و زبان C++ داشتند، در زبان C# نیز وجود دارد.
برای مثال:
1 2 3 | char* cptr; int* iptr; |
هیچ نظری ثبت نشده است