English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C# لغة قوية النوع. هذا يعني أننا يجب أن نعلن نوع المتغير، والذي يشير إلى نوع القيمة التي سيتم تخزينها، مثل عدد صحيح، عدد عشري، عشري عشري، نص إلخ.
تم إعلان وتحديد قيم متغيرات أنواع البيانات المختلفة أدناه.
string stringVar = "Hello World!!"; int intVar = 100; float floatVar = 10.2f; char charVar = 'A'; bool boolVar = true;
يقسم C# أنواع البيانات إلى نوعين رئيسيين: الأنواع النقية والأنواع الاستدلالية. الأنواع النقية تشمل أنواعًا بسيطة (مثل int،float،bool وchar)، أنواع القائمة، أنواع الهيكل و أنواع القيمة القابلة للتغيير. الأنواع الاستدلالية تشمل أنواع الكلاسات، أنواع الواجهات، أنواع الوكلاء وأنواع الأنواع. سيتم مناقشة الأنواع النقية والأنواع الاستدلالية بشكل مفصل في الفصل القادم.
C# يشمل بعض القيم المسبقة للأنواع و الأنواع الاستدلالية. الجدول التالي يظهر الأنواع المسبقة للبيانات:
النوع | الوصف | النطاق | الساقطة |
---|---|---|---|
byte | نوع بيانات عددية عشري ذو 8 بت | من 0 إلى 255 | |
sbyte | نوع بيانات عددية عشري ذو 8 بت | من -128 إلى 127 | |
short | نوع بيانات عددية عشري ذو 16 بت | من -32,768 إلى 32,767 | |
ushort | نوع بيانات عددية عشري ذو 16 بت | من 0 إلى 65,535 | |
int | نوع بيانات عددية عشري ذو 32 بت | -2,147,483,648 إلى 2,147,483,647 | |
uint | نوع بيانات عددية عشري ذو 32 بت | من 0 إلى 4,294,967,295 | u |
long | نوع بيانات عددية عشري ذو 64 بت | -9,223,372,036,854,775,808 إلى 9,223,372,036,854,775,807 | l |
ulong | نوع عدد غير الموقعة 64 بت | من 0 إلى 18,446,744,073,709,551,615 | ul |
float | نوع ثنائي النقاط 32 بت | -3.402823e38 إلى 3.402823e38 | f |
double | نوع ثنائي النقاط 64 بت | -1.79769313486232e308 إلى 1.79769313486232e308 | d |
decimal | قيمة عشرية دقيقة 128 بت، 28-29 ديجيت | (+ أو-)1.0 x 10e-28 إلى 7.9 x 10e28 | m |
char | رمز يونيكود 16 بت | أي رمز صالح، مثل a، *, \x0058 (hex)، أو\u0058 (يونيكود) | |
bool | قيمة منطقية 8 بتية صحيح/خطأ | صحيح أو خطأ | |
object | أصل جميع الأنواع | ||
string | سلسلة رموز يونيكود | ||
DateTime | يعبر عن تاريخ وموعد | 0:00:00am 1/1/01 إلى 11:59:59pm 12/31/9999 |
كما هو موضح في الجدول أعلاه، يحتوي كل نوع بيانات (استثنًا الأنواع النصية والأشياء) على نطاق قيم. إذا كانت القيمة تتجاوز نطاق نوع البيانات المسموح به، فإن الماكينات الأتمتة تقدم خطأ. على سبيل المثال، نطاق نوع البيانات int هو من -2,147,483,648 إلى 2,147,483,647. لذلك، إذا كانت القيمة المحددة ليست في هذا النطاق، فإن الماكينات الأتمتة تقدم خطأ.
مثال: خطأ في التجميع
// خطأ في التجميع: لا يمكن تحويل النوع 'long' بشكل تلقائي إلى 'int'. int i = 21474836470;
يجب أن تكون قيم الأعداد غير الموقعة، long، float، double وdecimal محملة بالسمات u، l، f، d وm على التوالي.
uint ui = 100u; float fl = 10.2f; long l = 45755452222222l; ulong ul = 45755452222222ul; double d = 11452222.555d; decimal mon = 1000.15m;
أنواع البيانات المسبقة التعريف لها أسماء بديلة كأسماء النوع.NET (فئة CLR). الجدول أدناه يظهر أسماء الأنواع المسبقة التعريف وأسماء الفئات.NET المرتبطة بها.
الاسم المختصر | نوع.NET | النوع |
---|---|---|
byte | System.Byte | struct |
sbyte | System.SByte | struct |
int | System.Int32 | struct |
uint | System.UInt32 | struct |
short | System.Int16 | struct |
ushort | System.UInt16 | struct |
long | System.Int64 | struct |
ulong | System.UInt64 | struct |
float | System.Single | struct |
double | System.Double | struct |
char | System.Char | struct |
bool | System.Boolean | struct |
object | System.Object | Class |
string | System.String | Class |
decimal | System.Decimal | struct |
DateTime | System.DateTime | struct |
هذا يعني أن المتغير سواء كان تعريفه int أو Int32 هو نفسه.
int i = 345; Int32 i = 345; // نفس الشرح
قيم بعض أنواع البيانات ستُتحول تلقائيًا إلى أنواع بيانات أخرى في C#. هذا يُسمى بتحويل ضمني.
int i = 345; float f = i; Console.WriteLine(f); //الناتج: 345
في المثال السابق، قيمة متغير int i تُ赋ًى إلى متغير float f، لأن هذه العملية التحويلية مُndefined مسبقًا في C#.
هذه هي جدول تحويل البيانات ضمني.
تحويل ضمني | إلى |
---|---|
sbyte | short, int, long, float, double، decimal |
byte | short, ushort, int, uint, long, ulong, float, double، decimal |
short | int, long, float, double أو decimal |
ushort | int, uint, long, ulong, float, double أو decimal |
int | long, float, double أو decimal. |
uint | long, ulong, float, double أو decimal |
long | float, double أو decimal |
ulong | float, double أو decimal |
char | ushort, int, uint, long, ulong, float, double أو decimal |
float | Double |
من التحويل من int أو uint أو long أو ulong إلى float وكذلك التحويل من long أو ulong إلى double قد يؤدي إلى فقدان الدقة. لا يوجد تحويل ضمني إلى نوع البيانات char.
但是,并非所有数据类型都隐式转换为其他数据类型。例如,int类型不能隐式转换为uint。必须明确指定它,如下所示。
مثال: التحويلات الصريحة public static void Main() { int i = 100; uint u = (uint) i; Console.Write(i);
}