العبارات عالية المستوى (منذ .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 خطوة بخطوة. هل تريد صنع ألعاب بلغة C#؟ تعلّمك دورة C# لـ Unity برمجة Unity بألعاب ثلاثية الأبعاد تعمل في المتصفح.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من اللبنات الأكثر شيوعًا (الأنواع والتحكم في التدفق والدوال) وصولًا إلى المتقدمة (LINQ و async والأنواع العامة)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.