C# (تُنطق "سي شارب") لغة برمجة عامة الأغراض صمّمها في Microsoft فريق بقيادة Anders Hejlsberg، وصدرت أول مرة عام 2002. هي ثابتة الأنواع (لكل متغيّر نوع يتحقق منه المترجم قبل تشغيل البرنامج)، وكائنية التوجه (تُنظَّم الشيفرة في أصناف)، ومُدارة (يحرّر جامع النفايات الذاكرة عنك). وتستعير C# الحديثة كثيرًا من البرمجة الوظيفية أيضًا: تعابير lambda واستعلامات LINQ ومطابقة الأنماط والسجلات غير القابلة للتغيير.
هذا برنامج C# كامل. اضغط Run:
المخرجات:
Hello, Ada! It is 2026.
فيمَ تُستخدم C#
C# لغة عامة الأغراض، لذا تجدها في معظم أنواع البرمجيات، لكن بضعة مجالات تستحوذ على معظم استخدامها:
- الألعاب. يُبرمَج Unity، أحد أكثر محركات الألعاب استخدامًا، بلغة C#. ويدعمها Godot أيضًا.
- الواجهات الخلفية للويب. ASP.NET Core هو إطار الويب في .NET لواجهات API والمواقع وتطبيقات الوقت الحقيقي. وهو من أسرع أطر الويب الشائعة في الاختبارات المعيارية العامة.
- تطبيقات سطح المكتب. WPF وWindows Forms على Windows، و.NET MAUI وAvalonia عبر المنصات.
- السحابة والخدمات. Azure Functions والعمّال في الخلفية والخدمات المصغّرة في الحاويات.
- الأدوات والأتمتة. أدوات سطر الأوامر وسكربتات البناء ومعالجة البيانات.
وهي شائعة خصوصًا في الشركات الكبرى التي تعمل على تقنيات Microsoft وفي استوديوهات الألعاب. تطبيقات الجوال ممكنة بـ .NET MAUI (خليفة Xamarin)، لكنها مجال أصغر من Kotlin أو Swift.
C# و.NET ليستا الشيء نفسه
C# هي اللغة. أما .NET فهي المنصة التي تشغّلها، ولها ثلاثة أجزاء:
- وقت التشغيل (CLR). لا ينتج مترجم C# شيفرة آلة. بل ينتج لغة وسيطة (IL) تُخزَّن في ملفات
.dllأو.exe. عند تشغيل البرنامج يترجم Common Language Runtime هذه اللغة الوسيطة إلى شيفرة أصلية في لحظة الحاجة (JIT)، ويدير الذاكرة بجامع نفايات، ويفرض سلامة الأنواع. - مكتبة الأصناف الأساسية. المجموعات والوصول إلى الملفات والشبكات والنصوص والتواريخ والخيوط: كل ما تحت
System.*. - SDK. الأمر
dotnetالذي ينشئ المشاريع ويبنيها ويختبرها ويشغّلها.
تُترجم لغات أخرى إلى اللغة الوسيطة نفسها (F# وVisual Basic)، ولهذا يستطيع برنامج C# استخدام مكتبة مكتوبة بـ F#.
للمنصة جيلان. .NET Framework (من 1.0 عام 2002 حتى 4.8.1) يعمل على Windows فقط وما زال يشغّل تطبيقات قديمة كثيرة. و**.NET** (واسمه .NET Core حتى الإصدار 5) هو الخليفة مفتوح المصدر ومتعدد المنصات الذي يعمل على Windows وLinux وmacOS. العمل الجديد يستهدف .NET؛ والإصدارات الزوجية مثل .NET 8 و.NET 10 تحصل على ثلاث سنوات من الدعم طويل الأمد.
كيف يُبنى برنامج C#
يتكوّن برنامج C# من أنواع (أصناف وبنى وواجهات وتعدادات وسجلات) تحتوي على أعضاء (حقول وخصائص ودوال). يبدأ التنفيذ في دالة ساكنة اسمها Main. تجمع فضاءات الأسماء الأنواع المترابطة، وتتيح لك موجّهات using الإشارة إليها بأسماء قصيرة.
المخرجات:
Maya: 21.00
Leo: 13.00
بعض الأمور ظاهرة منذ الآن: Order صنف له خاصيتان (Customer وTotal) ومُنشئ ودالة. decimal هو النوع المخصص للمال، واللاحقة m تميّز القيمة الحرفية العشرية. تتيح var للمترجم استنتاج نوع المتغيّر المحلي، وList<Order> مجموعة عامة (generic) لا تقبل إلا كائنات Order. وتنسّق {order.Total:F2} داخل $"..." الرقم بمنزلتين عشريتين.
في مشروع حقيقي يعيش كل صنف عادة في ملفه الخاص، وتُترجم الملفات معًا في تجميع (assembly) واحد. راجع الأصناف والكائنات للتفاصيل.
الأنواع الثابتة عمليًا
يعرف المترجم نوع كل تعبير، فلا تصل فئة كبيرة من الأخطاء إلى برنامج قيد التشغيل أبدًا. إسناد نص إلى int، أو استدعاء دالة غير موجودة، أو تمرير الوسائط بترتيب خاطئ، كلها تفشل وقت الترجمة برسالة خطأ تشير إلى السطر.
المخرجات:
29.97
45
والأنواع تقود المحرّر أيضًا: الإكمال التلقائي وإعادة التسمية و"البحث عن كل المراجع" دقيقة في C# لأن الأدوات تقرأ معلومات الأنواع نفسها التي يقرؤها المترجم.
إصدارات C# وما أضافه كل منها
منذ C# 9 عام 2020 يصدر إصدار جديد كل نوفمبر مع إصدار جديد من .NET؛ وقبل ذلك كانت الإصدارات تأتي كل سنتين إلى ثلاث. يُصمَّم كل إصدار كي تبقى الشيفرة الموجودة قابلة للترجمة، والاستثناءات النادرة (مثل تحوّل field إلى كلمة محجوزة داخل موصّلات الخصائص في C# 14) موثّقة كتغييرات كاسرة، لذا يُترجم برنامج مكتوب لـ C# 2 اليوم دون تغيير في أغلب الأحوال.
| الإصدار | السنة | أبرز الإضافات |
|---|---|---|
| C# 2 | 2005 | الأنواع العامة (Generics)، أنواع القيم القابلة لـ null (int?)، المكرّرات (yield) |
| C# 3 | 2007 | LINQ، تعابير lambda، var، مهيّئات الكائنات، دوال التوسيع |
| C# 4 | 2010 | dynamic، المعاملات الاختيارية والمسمّاة |
| C# 5 | 2012 | async وawait |
| C# 6 | 2015 | استيفاء النصوص $"..."، nameof، المعامل الشرطي لـ null ?. |
| C# 7 | 2017 | الصفوف (Tuples)، out var، مطابقة الأنماط بـ is، فواصل الأرقام |
| C# 8 | 2019 | أنواع المراجع القابلة لـ null، تعابير switch، النطاقات s[1..4]، ??=، التدفقات غير المتزامنة |
| C# 9 | 2020 | السجلات (Records)، موصّلات init، العبارات عالية المستوى، new() المستهدِف للنوع |
| C# 10 | 2021 | موجّهات using العامة، فضاءات الأسماء على مستوى الملف، بنى السجلات |
| C# 11 | 2022 | النصوص الحرفية الخام """، الأعضاء required، أنماط القوائم |
| C# 12 | 2023 | المُنشئات الأساسية للأصناف، تعابير المجموعات [1, 2, 3] |
| C# 13 | 2024 | مجموعات params، النوع System.Threading.Lock |
| C# 14 | 2025 | أعضاء التوسيع، الكلمة field في الخصائص |
الإصدارات الأحدث تزيل التكلّف في الغالب. يستخدم هذا البرنامج (C# 9 وما بعده) العبارات عالية المستوى (لا class Program ولا Main) وسجلًا وتعبير switch:
// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));
static string Shipping(Order o) => o.Total switch
{
>= 50m => "free shipping",
>= 20m => "standard shipping",
_ => "shipping fee applies"
};
record Order(string Customer, decimal Total);
المنطق نفسه بالأسلوب الصريح الأقدم، الذي يُترجم على C# 6 وكل إصدار لاحق:
المخرجات:
standard shipping
الشكلان كلاهما C# صالحة. ستصادف الأسلوب الأقدم الصريح في الشيفرات الموجودة والدروس ومشاريع Unity، والأسلوب الأقصر في مشاريع .NET الجديدة.
LINQ: الاستعلام عن البيانات داخل اللغة
LINQ (Language Integrated Query، منذ C# 3) من الميزات التي يذكرها الناس حين يشرحون لماذا يحبون C#. تتيح لك تصفية أي مجموعة وترتيبها وتجميعها وتحويلها بسلسلة من الدوال:
المخرجات:
95, 91, 88, 72
Average: 78.0
Best: 95
تعمل الصياغة نفسها على القوائم في الذاكرة، وعلى جداول قواعد البيانات عبر Entity Framework، وعلى XML. المزيد في LINQ.
هل C# لغة أولى جيدة؟
تطلب C# منك في البداية أكثر مما تطلبه Python: تصرّح بالأنواع، وتنهي العبارات بفاصلة منقوطة، وتضع الشيفرة داخل أصناف. في المقابل يلتقط المترجم الأخطاء مبكرًا، والأدوات (Visual Studio وVS Code وRider) ممتازة، والمفاهيم تنتقل مباشرة إلى Java وTypeScript وKotlin وC++. إن أردت بناء ألعاب Unity أو العمل في شركة تعتمد .NET فهي الخيار البديهي. وإن كان هدفك تحليل البيانات أو تعلّم الآلة فلدى Python منظومة أكبر.
للبدء، ثبّت .NET SDK وشغّل dotnet new console، أو ابدأ بـ Hello World وشغّل الأمثلة في هذه الصفحات مباشرة.
الأسئلة الشائعة
ما هي لغة C#؟
C# (تُنطق "سي شارب") لغة برمجة عامة الأغراض، ثابتة الأنواع وكائنية التوجه، أنشأتها Microsoft وصدرت أول مرة عام 2002. تُترجم شيفرتها المصدرية إلى لغة وسيطة يحوّلها وقت تشغيل .NET إلى شيفرة آلة، مع ذاكرة يديرها جامع النفايات. تُستخدم في الواجهات الخلفية للويب وألعاب Unity وتطبيقات سطح المكتب والخدمات السحابية والأدوات.
هل C# هي نفسها .NET؟
لا. C# هي اللغة، و.NET هي المنصة التي تعمل عليها: وقت التشغيل (CLR) ومكتبة الأصناف الأساسية (System.Collections.Generic وSystem.IO وغيرها) وأدوات SDK. تعمل F# وVisual Basic أيضًا على .NET، وعادة يصدر إصدار C# مع إصدار .NET (مثل C# 12 مع .NET 8).
فيمَ تُستخدم لغة C#؟
واجهات API والمواقع بـ ASP.NET Core، والألعاب بـ Unity (لغة البرمجة النصية فيه هي C#)، وتطبيقات سطح مكتب Windows بـ WPF وWinForms، والتطبيقات متعددة المنصات بـ .NET MAUI، والخدمات السحابية وAzure Functions، وأدوات سطر الأوامر. وهي شائعة في برمجيات الشركات واستوديوهات الألعاب.
هل تعلّم C# صعب؟
هي لغة أولى متوسطة الصعوبة. صياغتها على نمط C وأكثر صرامة من Python، لأن لكل متغيّر نوعًا يتحقق منه المترجم، لكن الذاكرة تُدار عنك ورسائل الخطأ واضحة. يستطيع معظم المبتدئين كتابة برامج كونسول مفيدة بعد بضعة أسابيع من التمرين.
هل ما زال تعلّم C# يستحق؟
نعم. تأتي C# باستمرار بين أكثر اللغات استخدامًا في استطلاعات المطوّرين، و.NET مفتوحة المصدر ومتعددة المنصات، وتحصل اللغة على إصدار جديد كل نوفمبر. وهي الخيار العملي إن أردت صنع ألعاب في Unity أو العمل في شركات مبنية على تقنيات Microsoft.