ورقة 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#؟
int و double و bool و struct و enum) بياناتها مباشرةً وتُنسخ عند الإسناد أو التمرير إلى دالة - وتغيير النسخة لا يؤثر في الأصل. أمّا أنواع المرجع (class و string والمصفوفات و List<T>) فتحمل مرجعًا إلى بيانات على الكومة، لذا يمكن لمتغيرين أن يشيرا إلى الكائن نفسه ويكون التغيير عبر أحدهما مرئيًا عبر الآخر. و string نوع مرجع لكنه يتصرّف كأنه غير قابل للتغيير.ما هو LINQ ومتى ينبغي أن أستخدمه؟
Where و Select و OrderBy تتيح لك تصفية المجموعات وتحويلها وتجميعها بمناداة مقروءة وقابلة للتسلسل بدلًا من الحلقات اليدوية. استخدمه كلما كنت ستكتب حلقة لبناء قائمة مصفّاة أو مُسقَطة - فهو موجز ويُقيَّم بكسل حتى تستدعي ToList() أو تتكرّر عليه.