أنواع البيانات في لغة C#: Double، عدد صحيح، تعويم، شار

⚡ ملخص ذكي

تحدد أنواع البيانات في لغة C# نوع القيم التي يمكن أن يحملها المتغير، بدءًا من الأعداد الصحيحة والأعداد العشرية وحتى القيم المنطقية والسلاسل النصية، كما تحدد مقدار الذاكرة التي يحجزها كل متغير أثناء تنفيذ البرنامج.

  • 🔢 أنواع الأعداد الصحيحة: تقوم الكلمة المفتاحية Int32 (int) بتخزين الأعداد الصحيحة مثل 10 أو 20 أو 30 ضمن نطاق ذاكرة ثابت.
  • 🔣 أنواع الأعداد العشرية: يحتوي النوعان double و float على قيم عشرية، بينما يوفر النوع decimal دقة أعلى للحسابات المالية.
  • ☑️ النوع المنطقي: تخزن الكلمة المفتاحية Boolean القيمتين true أو false فقط، وهي التي تحدد المنطق الشرطي.
  • 🔤 أنواع النصوص: يخزن النوع char حرفًا واحدًا، بينما يخزن النوع string سلسلة من الأحرف كنص.
  • 🧩 القيمة مقابل المرجع: تقوم أنواع القيم بتخزين البيانات مباشرة، بينما تقوم أنواع المراجع مثل السلسلة بتخزين عنوان الذاكرة.
  • 🤖 مساعدة الذكاء الاصطناعي: يقدم GitHub Copilot و ML.NET اقتراحات برمجية وتعلمًا آليًا لمعالجة أنواع البيانات في لغة C#.

أنواع البيانات في C#

ما هي أنواع البيانات في C#؟

تأتي لغة C# مع مجموعة من أنواع البيانات الأساسية. تُستخدم أنواع البيانات هذه لبناء القيم المستخدمة داخل التطبيق. دعنا نستكشف أنواع البيانات الأساسية المتوفرة في C#. لكل مثال، سنقوم بتعديل الوظيفة الرئيسية فقط في ملف Program.cs الخاص بنا.

1) عدد صحيح

تُستخدم أنواع البيانات الصحيحة للعمل مع الأرقام. في هذه الحالة، تكون الأرقام عبارة عن أرقام صحيحة مثل 10 أو 20 أو 30. في لغة C#، يتم الإشارة إلى نوع البيانات بواسطة الكلمة الأساسية Int32. فيما يلي مثال لكيفية استخدام نوع البيانات هذا. في مثالنا، سوف نقوم بتعريف متغير Int32 يسمى num. سنقوم بعد ذلك بتعيين قيمة عددية للمتغير ثم نعرضها وفقًا لذلك.

أنواع البيانات الصحيحة في C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   Int32 num=30;
   Console.Write(num);  
   
   Console.ReadKey();
  }
 }
}

Code تفسير:-

  1. تم تحديد نوع البيانات Int32 للإعلان عن متغير عدد صحيح يسمى num. ثم يتم تعيين قيمة المتغير 30.
  2. وأخيرًا، يتم استخدام وظيفة console.write لعرض الرقم على وحدة التحكم.

إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج بنجاح، سيتم عرض الإخراج التالي.

الإخراج:

أنواع البيانات الصحيحة في C#

من الناتج، يمكنك أن ترى بوضوح أن المتغير Integer المسمى num تم عرضه في وحدة التحكم

2) Double

يتم استخدام نوع البيانات المزدوج للعمل مع الأعداد العشرية. في هذه الحالة، تكون الأرقام عبارة عن أرقام صحيحة مثل 10.11 أو 20.22 أو 30.33. في لغة C#، يتم الإشارة إلى نوع البيانات بالكلمة الأساسية "Double". يوجد أدناه مثال على نوع البيانات هذا.

في مثالنا، سنقوم بتعريف متغير مزدوج يسمى num. ثم سنقوم بتعيين Double القيمة إلى المتغير ثم عرضها وفقًا لذلك.

Double أنواع البيانات في C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   double num=30.33;
   Console.Write(num); 
   
   Console.ReadKey();
  }
 }
}

Code تفسير:-

  1. يتم تحديد نوع البيانات المزدوج للإعلان عن نوع مزدوج متغير يسمى رقم. ثم يتم تعيين قيمة للمتغير 30.33.
  2. وأخيرًا، يتم استخدام وظيفة console.write لعرض الرقم على وحدة التحكم.

إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج بنجاح، سيتم عرض الإخراج التالي.

الإخراج:

Double أنواع البيانات في C#

من الناتج، يمكنك أن ترى بوضوح أن المتغير المزدوج المسمى num تم عرضه في وحدة التحكم

3) منطقية

يتم استخدام نوع البيانات المنطقية للعمل مع القيم المنطقية لـ صح وخطأ. في C#، تتم الإشارة إلى نوع البيانات بواسطة الكلمة الأساسية المنطقية. فيما يلي مثال على نوع البيانات هذا الذي يمكن استخدامه.

في مثالنا، سوف نقوم بتعريف متغير منطقي يسمى "الحالة". سنقوم بعد ذلك بتعيين قيمة منطقية للمتغير ثم نعرضها وفقًا لذلك.

أنواع البيانات المنطقية في C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
  { 
   static void Main(string[] args) 
   {
    Boolean status=true;
    Console.Write(status);
    
    Console.ReadKey();
   }
  }
}

Code تفسير:-

  1. تم تحديد نوع البيانات المنطقية للإعلان عن متغير منطقي يسمى "الحالة". ثم يتم تعيين قيمة للمتغير صواب/خطأ.
  2. وأخيرًا، يتم استخدام وظيفة console.write لعرض القيمة المنطقية على وحدة التحكم.

إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج بنجاح، سيتم عرض الإخراج.

الإخراج:

أنواع البيانات المنطقية في C#

من الناتج، يمكنك أن ترى بوضوح أن المتغير المنطقي الذي يساوي true تم عرضه في وحدة التحكم

4) سلسلة

يتم استخدام نوع بيانات السلسلة للعمل مع قيم السلسلة. في C#، يُشار إلى نوع البيانات بالكلمة الأساسية "String". يوجد أدناه مثال على نوع البيانات هذا.

في مثالنا، سوف نقوم بتعريف متغير سلسلة يسمى "رسالة". سنقوم بعد ذلك بتعيين قيمة سلسلة للمتغير ثم عرضها وفقًا لذلك.

أنواع بيانات السلسلة في C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class program
 {
  static void Main(string[] args)
  {
   String message="Hello";
   Console.Write(message);
   
   Console.ReadKey();
  }
 }
}

Code تفسير:-

  1. تم تحديد نوع بيانات السلسلة للإعلان عن متغير سلسلة يسمى الرسالة. ثم يتم تعيين قيمة "Hello" للمتغير.
  2. وأخيرًا، يتم استخدام وظيفة console.write لعرض قيمة السلسلة على وحدة التحكم.

إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج بنجاح، سيتم عرض الإخراج.

الإخراج:

أنواع بيانات السلسلة في C#

من الناتج، يمكنك أن ترى بوضوح أن متغير السلسلة المسمى message تم عرضه في وحدة التحكم

قائمة كاملة بأنواع البيانات في لغة C#

تُغطي الأمثلة الأربعة أعلاه أكثر أنواع البيانات شيوعًا، لكن لغة C# تُوفر مجموعة كاملة من أنواع بيانات القيم المُدمجة. يحجز كل نوع مقدارًا ثابتًا من الذاكرة ويقبل نطاقًا مُحددًا من القيم، لذا فإن اختيار أصغر نوع يُناسب بياناتك بأمان يُحافظ على كفاءة البرنامج.

نوع البيانات المقاس يتراوح / Descriptأيون
بايت بايت 1 0 إلى 255
في صفقات بايت 2 -32,768 ل32,767
int (Int32) بايت 4 -2,147,483,648 ل2,147,483,647
التداول الطويل بايت 8 أعداد صحيحة كبيرة جدًا (±9.2 كوينتيليون)
الطفو بايت 4 الأعداد العشرية بدقة تتراوح بين 6 و7 رقمًا تقريبًا
مضاعفة بايت 8 الأعداد العشرية بدقة تتراوح بين 15 و16 رقمًا تقريبًا
عدد عشري بايت 16 أرقام عشرية عالية الدقة (28-29 رقمًا) للنقود
دبابة بايت 2 حرف واحد من رموز يونيكود
منطقي بايت 1 صحيحة أو خاطئة

إلى جانب أنواع القيم هذه، يُعد نوع السلسلة النصية أكثر أنواع المراجع استخدامًا، حيث يخزن سلسلة من الأحرف بأي طول. ويؤدي اختيار النوع المناسب إلى تجنب أخطاء تجاوز السعة واستخدام الذاكرة غير الضروري.

أنواع القيم مقابل أنواع المراجع في لغة C#

تنقسم جميع أنواع البيانات في لغة C# إلى مجموعتين رئيسيتين: أنواع القيم وأنواع المراجع. ويتحكم هذا التمييز في كيفية تخزين البيانات في C# وكيفية تصرف المتغير عند نسخه أو تمريره إلى دالة.

  • أنواع القيم: تخزن هذه الأنواع البيانات الفعلية مباشرةً، عادةً على المكدس. int، double، bool، char، التعدادو struct هما نوعان من أنواع القيم. إن إسناد قيمة لمتغير إلى آخر يؤدي إلى نسخ القيمة، وبالتالي يظل المتغيران مستقلين.
  • أنواع المراجع: تُخزّن هذه الأنواع مرجعًا (عنوانًا في الذاكرة) يُشير إلى البيانات الموجودة في الكومة. تُعدّ السلاسل النصية والكائنات والمصفوفات ومثيلات الفئات من أنواع المراجع. عند نسخ متغير مرجعي، يتم نسخ العنوان فقط، وبالتالي يشترك كلا المتغيرين في نفس الكائن.

لا يمكن أن تكون قيمة متغير من نوع القيمة فارغة (null) لأنه يحمل قيمة دائمًا، بينما تكون القيمة الافتراضية لمتغير من نوع مرجعي غير مهيأ فارغة (null). يساعدك فهم هذا الفرق على توقع كيفية انتقال التغييرات في البيانات عبر البرنامج.

تحويل الأنواع في لغة C#

تحتاج لغة C# بشكل متكرر إلى تحويل قيمة من نوع بيانات إلى آخر، مثل تحويل مدخلات المستخدم، التي تكون دائمًا نصية، إلى رقم. تُسمى هذه العملية بتحويل النوع، وتحدث بثلاث طرق رئيسية.

  • التحويل الضمني: يقوم المترجم بالتحويل تلقائيًا عندما لا يكون هناك خطر فقدان البيانات، مثل إسناد قيمة عددية صحيحة إلى قيمة عددية مزدوجة. لا يتطلب الأمر أي صيغة خاصة.
  • التحويل الصريح (التحويل النوعي): ضع نوع البيانات المستهدف بين قوسين، على سبيل المثال (int)myDoubleقد يؤدي التحويل إلى فقدان البيانات - فتحويل عدد عشري مزدوج إلى عدد صحيح يؤدي إلى حذف الجزء العشري - لذا فإنك تقبل المخاطرة عن قصد.
  • طرق مساعدة: تقوم فئة Convert (Convert.ToInt32) وطريقة Parse لكل نوع (int.Parse) بتحويل السلاسل النصية إلى أرقام، بينما تقوم ToString بتحويل القيم مرة أخرى إلى نص قابل للقراءة.

يؤدي اختيار التحويل الصحيح إلى الحفاظ على دقة البيانات ومنع حدوث أخطاء وقت التشغيل عندما لا تتطابق الأنواع على جانبي عملية التعيين.

الأسئلة الشائعة

تُخزّن أنواع البيانات float و double و decimal جميعها أعدادًا عشرية، لكنها تختلف في الدقة والحجم. يستخدم نوع البيانات float أربعة بايتات مع حوالي سبعة أرقام، ويستخدم نوع البيانات double ثمانية بايتات مع حوالي خمسة عشر رقمًا، بينما يستخدم نوع البيانات decimal ستة عشر بايتًا للقيم المالية عالية الدقة.

لا يوجد فرق حقيقي. int هو اسم بديل في لغة C# لنوع System.Int32 في .NET، لذا فإن int وInt32 يُترجمان إلى نفس النتيجة تمامًا. يكتب معظم المطورين int اختصارًا، بينما يُحدد Int32 نوع إطار العمل الأساسي بشكل صريح.

السلسلة النصية هي نوع مرجعي، لأنها تخزن مرجعًا لبيانات حرفية موجودة في الذاكرة الديناميكية. ومع ذلك، فهي تتصرف كنوع قيمة في جانب واحد: السلاسل النصية غير قابلة للتغيير، لذا فإن أي تغيير يُنشئ كائن سلسلة نصية جديدًا بدلاً من تعديل الكائن القديم.

يسمح النوع القابل للتصفير لأنواع القيم مثل int أو bool باستيعاب قيمة فارغة (null)، تُكتب بعلامة استفهام لاحقة، على سبيل المثال int?. وهو مفيد للبيانات الاختيارية وحقول قواعد البيانات، حيث يجب تمثيل القيمة المفقودة بشكل مختلف عن الصفر أو الخطأ.

يحتوي نوع البيانات char على حرف واحد فقط من أحرف Unicode ويستخدم علامات اقتباس مفردة، مثل 'A'. أما نوع البيانات string فيحتوي على سلسلة من صفر أو أكثر من الأحرف ويستخدم علامات اقتباس مزدوجة. يُعدّ char نوع بيانات قيمة، بينما يُعدّ string نوع بيانات مرجعي.

يستنتج var نوع المتغير أثناء الترجمة، ثم يُحدد هذا النوع مع دعم كامل لـ IntelliSense. أما dynamic فيؤجل التحقق من النوع إلى وقت التشغيل، لذا لا تظهر أخطاء النوع إلا أثناء التنفيذ. استخدم var لضمان الأمان، و dynamic لسيناريوهات الربط المتأخر المرنة.

نعم. يقترح GitHub Copilot تعريفات الأنواع والتحويلات والقوالب الجاهزة داخل Visual Studio و Visual Studio Codeيمكنه أن يوصي بنوع رقمي مناسب أو يقوم بإنشاء رمز تحليل، ولكن يجب عليك مراجعة مخرجاته، لأن الاقتراحات قد تغفل عن الدقة أو مشاكل تجاوز السعة.

نعم. يقوم ML.NET بربط أنواع بيانات C# بميزات النموذج، باستخدام أنواع رقمية مثل float و double لبيانات التدريب، و string للنصوص. تصف فئات البيانات ذات الأنواع المحددة كل عمود، مما يسمح بدمج نماذج التعلم الآلي بسلاسة في تطبيقات C#.

تلخيص هذه التدوينة بـ: