ورقة C# المرجعية
آخر تحديث
Hello World وبنية البرنامج
العبارات عالية المستوى (منذ .NET 6) تتيح لك تخطّي الصنف النمطي.
| العنصر | الكود |
|---|---|
| برنامج عالي المستوى | Console.WriteLine("Hello, World!"); |
| استيراد مساحة أسماء | using System; |
| نقطة الدخول الكلاسيكية | static void Main(string[] args) { ... } |
| طباعة سطر | Console.WriteLine("text"); |
| قراءة سطر | string s = Console.ReadLine(); |
| استيفاء السلاسل النصية | Console.WriteLine($"Hi {name}"); |
| التعليقات | // line و /* block */ |
أنواع البيانات
| النوع | الوصف |
|---|---|
int | عدد صحيح بإشارة 32-بت |
long | عدد صحيح بإشارة 64-بت |
double / float | أعداد عشرية (نقطة عائمة) |
decimal | عدد عشري عالي الدقة (الأموال) |
bool | true أو false |
char | حرف Unicode واحد |
string | نص غير قابل للتغيير |
var | يستنتج المترجم النوع |
int? | نوع قيمة قابل لأن يكون null |
المتغيرات
| العملية | الصياغة |
|---|---|
| التعريف والتهيئة | int x = 5; |
| استنتاج النوع | var name = "Ada"; |
| ثابت | const double Pi = 3.14159; |
| حقل للقراءة فقط | readonly int id; |
| مرجع قابل لأن يكون null | string? maybe = null; |
| دمج null | var y = maybe ?? "default"; |
| شرطي على null | int? len = text?.Length; |
التحكم في التدفق
| العبارة | الصياغة |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| عبارة switch | switch (n) { case 1: ...; break; default: ...; } |
| تعبير switch | var s = n switch { 1 => "one", _ => "other" }; |
| حلقة while | while (i < n) { ... } |
| حلقة do-while | do { ... } while (i < n); |
| حلقة for | for (int i = 0; i < n; i++) { ... } |
| حلقة foreach | foreach (var item in list) { ... } |
| Break / continue | break; تخرج من حلقة، و continue; تتخطّى إلى التكرار التالي |
الدوال
| العملية | الصياغة |
|---|---|
| تعريف دالة | int Add(int a, int b) { return a + b; } |
| بجسم تعبيري | int Add(int a, int b) => a + b; |
| دون قيمة إرجاع | void Greet() { ... } |
| معامل اختياري | int Pow(int b, int e = 2) { ... } |
| وسائط مسمّاة | Pow(b: 2, e: 3); |
| معامل out | bool TryParse(string s, out int n) { ... } |
| دالة ساكنة | static int Square(int x) => x * x; |
| تعبير lambda | Func<int, int> f = x => x * 2; |
الأصناف والبرمجة الكائنية (OOP)
| العملية | الصياغة |
|---|---|
| تعريف صنف | class Dog { ... } |
| خاصية تلقائية | public string Name { get; set; } |
| خاصية للقراءة فقط | public int Id { get; } |
| باني (constructor) | public Dog(string name) { Name = name; } |
| إنشاء كائن | var d = new Dog("Rex"); |
| الوراثة | class Puppy : Dog { ... } |
| واجهة | interface IRunnable { void Run(); } |
| تجاوز دالة | public override void Speak() { ... } |
| سجلّ (غير قابل للتغيير) | record Point(int X, int Y); |
المجموعات
مجموعات عامة من System.Collections.Generic.
| النوع | الاستخدام والمثال |
|---|---|
List<T> | مصفوفة ديناميكية: list.Add(1); list.Count; |
Dictionary<K, V> | مفتاح-قيمة: dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | قيم فريدة: set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| مصفوفة | int[] nums = { 1, 2, 3 }; |
| مهيّئ مجموعة | var l = new List<int> { 1, 2, 3 }; |
| التكرار على قاموس | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
الاستعلام عن المجموعات بطلاقة؛ من System.Linq.
| العملية | الصياغة |
|---|---|
| التصفية | nums.Where(n => n > 0) |
| الإسقاط / التحويل | nums.Select(n => n * 2) |
| الترتيب | nums.OrderBy(n => n) / OrderByDescending(...) |
| أول مطابقة | nums.First(n => n > 5) / FirstOrDefault(...) |
| Any / all | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| عدّ المطابقات | nums.Count(n => n > 0) |
| التجميع الكلّي | nums.Sum(), nums.Max(), nums.Average() |
| التجميع حسب | items.GroupBy(i => i.Category) |
| التحقيق (Materialize) | .ToList() / .ToArray() |
الأنماط الشائعة (الخصائص، async)
| النمط | الصياغة |
|---|---|
| دالة async | async Task<int> GetAsync() { ... } |
| انتظار مهمة | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } تعمل دائمًا |
| Using (التخلّص) | using var file = File.OpenRead(path); |
| تنسيق السلاسل النصية | $"Total: {amount:C}" |
| صنف عام | class Box<T> { public T Value; } |
| مطابقة النمط | if (obj is Dog d) { d.Bark(); } |
صياغة C# والمجموعات واستعلامات LINQ التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة C# المرجعية هذه هي مرجع سريع لكتابة C# - أنواع البيانات، والتحكم في التدفق، والأصناف، ومجموعات List/Dictionary، و LINQ، وأنماط الخصائص و async التي تميّز كود .NET الاصطلاحي.
كل ما هنا هو C# قياسية على .NET ويعمل بأداة dotnet السطرية. انسخ ما تحتاجه، أو جرّب أيّ مقطع برمجي مباشرة في playground الخاص بـ C# - دون الحاجة إلى تثبيت أي SDK.
الأسئلة الشائعة حول ورقة C# المرجعية
هل ورقة C# المرجعية هذه مجانية؟
نعم. ورقة C# المرجعية هذه مجانية تمامًا، دون الحاجة إلى التسجيل. أضِفها إلى المفضلة وارجع إليها متى احتجت إلى البحث عن صياغة أو مجموعة أو دالة LINQ.
ما الفرق بين أنواع القيمة وأنواع المرجع في C#؟
تحمل أنواع القيمة (
int و double و bool و struct و enum) بياناتها مباشرةً وتُنسخ عند الإسناد أو التمرير إلى دالة - وتغيير النسخة لا يؤثر في الأصل. أمّا أنواع المرجع (class و string والمصفوفات و List<T>) فتحمل مرجعًا إلى بيانات على الكومة، لذا يمكن لمتغيرين أن يشيرا إلى الكائن نفسه ويكون التغيير عبر أحدهما مرئيًا عبر الآخر. و string نوع مرجع لكنه يتصرّف كأنه غير قابل للتغيير.ما هو LINQ ومتى ينبغي أن أستخدمه؟
LINQ (الاستعلام المدمج باللغة) هو مجموعة من الدوال مثل
Where و Select و OrderBy تتيح لك تصفية المجموعات وتحويلها وتجميعها بمناداة مقروءة وقابلة للتسلسل بدلًا من الحلقات اليدوية. استخدمه كلما كنت ستكتب حلقة لبناء قائمة مصفّاة أو مُسقَطة - فهو موجز ويُقيَّم بكسل حتى تستدعي ToList() أو تتكرّر عليه.هل يمكنني التدرّب على C# عبر الإنترنت؟
نعم. افتح playground الخاص بـ C# لتشغيل أيّ مقطع برمجي من هذه الورقة المرجعية في متصفحك - دون الحاجة إلى تثبيت أي SDK. وعندما ترغب في تعلّم منظّم، تأخذك دورة C# التفاعلية المجانية من Coddy من المتغيرات والحلقات إلى الأصناف والمجموعات و LINQ خطوة بخطوة.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من اللبنات الأكثر شيوعًا (الأنواع والتحكم في التدفق والدوال) وصولًا إلى المتقدمة (LINQ و async والأنواع العامة)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.