المتغيرات (Variables) في لغة C#

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

تعريف المتغيرات

يتم تعريف المتغيرات في C# باستخدام الصيغة التالية:

C#
<نوع البيانات> <اسم المتغير>;

مثال:

C#
int age; // تعريف متغير باسم age من نوع عدد صحيح
string name; // تعريف متغير باسم name من نوع نص
double salary; // تعريف متغير باسم salary من نوع عدد عشري مضاعف الدقة

يمكن أيضًا إعطاء قيمة ابتدائية للمتغير عند تعريفه:

C#
int age = 30;
string name = "أحمد";
double salary = 5000.50;

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

توجد أنواع بيانات مُضمّنة (built-in) عديدة في C#، من أهمها:

  • أنواع القيم (Value Types): تُخزّن القيمة مباشرة في الذاكرة. تشمل:
    • int: أعداد صحيحة (مثل: 10، -5، 0).
    • float: أعداد عشرية بدقة مفردة.
    • double: أعداد عشرية بدقة مضاعفة.
    • decimal: أعداد عشرية عالية الدقة، مُناسبة للعمليات المالية.
    • char: حروف (مثل: 'A'، 'ب').
    • bool: قيم منطقية (إما true أو false).
    • struct: هياكل بيانات مُعرّفة من قِبل المستخدم.
    • enum: أنواع تعدادية.
  • أنواع المراجع (Reference Types): تُخزّن مرجعًا (عنوانًا) إلى مكان البيانات في الذاكرة. تشمل:
    • string: نصوص.
    • object: النوع الأساسي لجميع الأنواع في C#.
    • class: أصناف (كائنات).
    • interface: واجهات.
    • delegate: مؤشرات دوال.
    • array: مصفوفات.
الاسمالنوع الموافق في منصة دوت نتالقيم التي يقبلهاالحجم في الذاكرة
boolSystem.Booleantrue أو false1 بايت
sbyteSystem.SByteمن 128- حتى 1278 بت
byteSystem.Byteمن 0 حتى 2558 بت
shortSystem.Int16من 32,768- حتى 32,76716 بت
ushortSystem.UInt16من 0 حتى 65,53516 بت
intSystem.Int32من 2,147,483,648- حتى 2,147,483,64732 بت
uintSystem.UInt32من 0 حتى 4,294,967,29532 بت
longSystem.Int64من 9,223,372,036,854,775,808- حتى 9,223,372,036,854,775,80764 بت
ulongSystem.UInt64من 0 حتى 18,446,744,073,709,551,61564 بت
charSystem.Charمن U+0000 حتى U+ffff16 بت
floatSystem.Singleمن 3.410<sup>38</sup>- حتى +3.410<sup>38</sup>32 بت
doubleSystem.Doubleمن ±5.010<sup>-324</sup> حتى ±1.710<sup>308</sup>64 بت
decimalSystem.Decimal(-7.910<sup>28</sup> to 7.910<sup>28</sup>)/(10<sup>0</sup> to 28)128 بت
stringSystem.Stringحسب حدود الذاكرة-
objectSystem.Objectيمكن تخزين بيانات من أي نوع-

تسمية المتغيرات

توجد قواعد لتسمية المتغيرات في C#:

  • يجب أن يبدأ اسم المتغير بحرف أو شرطة سفلية (_).
  • يمكن أن يحتوي الاسم على حروف وأرقام وشرطات سفلية.
  • لا يمكن أن يحتوي الاسم على مسافات.
  • يُفضّل استخدام طريقة الجملة السنامية (camelCase) في تسمية المتغيرات (مثل: firstName، userAge).
  • تُعتبر C# حساسة لحالة الأحرف (case-sensitive)، أي أن age تختلف عن Age.
  • لا يجوز استخدام الكلمات المحجوزة في C# كأسماء للمتغيرات (مثل: int، string، if، for).

مثال عملي

C#
using System;

public class Program
{
public static void Main(string[] args)
{
int x = 10;
int y = 5;
int sum = x + y;

Console.WriteLine("مجموع " + x + " و " + y + " يساوي " + sum); // سيطبع: مجموع 10 و 5 يساوي 15

string message = "مرحباً بالعالم!";
Console.WriteLine(message); // سيطبع: مرحباً بالعالم!
}
}

هذا المثال يُوضّح كيفية تعريف متغيرات من أنواع مختلفة وإجراء عمليات عليها.

نطاق المتغير (Variable Scope)

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

استخدام الكلمة المفتاحية var

يمكن استخدام الكلمة المفتاحية var لتعريف متغير دون تحديد نوعه بشكل صريح. يقوم المُترجم بتحديد نوع المتغير تلقائيًا بناءً على القيمة المُسندة إليه.

C#
var name = "علي"; // سيُحدّد المُترجم نوع name على أنه string
var age = 25; // سيُحدّد المُترجم نوع age على أنه int

يُفضّل استخدام var عندما يكون نوع المتغير واضحًا من القيمة المُسندة إليه، وذلك لجعل الكود أكثر اختصارً