Hello World ומבנה התוכנית
משפטים ברמה העליונה (מאז .NET 6) מאפשרים לוותר על מחלקת ה-boilerplate.
| רכיב | קוד |
|---|
| תוכנית ברמה העליונה | Console.WriteLine("Hello, World!"); |
| ייבוא namespace | using System; |
| נקודת כניסה קלאסית | static void Main(string[] args) { ... } |
| הדפסת שורה | Console.WriteLine("text"); |
| קריאת שורה | string s = Console.ReadLine(); |
| שילוב משתנים במחרוזת (Interpolation) | 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-coalescing | var y = maybe ?? "default"; |
| Null-conditional | 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; } |
| גוף בביטוי (Expression-bodied) | 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 { ... } |
| Auto property (property אוטומטי) | public string Name { get; set; } |
| Property לקריאה בלבד | public int Id { get; } |
| בנאי | public Dog(string name) { Name = name; } |
| יצירת אובייקט | var d = new Dog("Rex"); |
| ירושה | class Puppy : Dog { ... } |
| ממשק (Interface) | interface IRunnable { void Run(); } |
| דריסת מתודה | public override void Speak() { ... } |
| Record (בלתי ניתן לשינוי) | record Point(int X, int Y); |
Collections
Collections גנריים מתוך 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 }; |
| אתחול collection | var l = new List<int> { 1, 2, 3 }; |
| מעבר על dictionary | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
שאילתות זורמות על collections; מתוך 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) |
| המרה לאוסף ממשי | .ToList() / .ToArray() |
דפוסים נפוצים (properties, async)
| דפוס | תחביר |
|---|
| מתודה אסינכרונית | async Task<int> GetAsync() { ... } |
| המתנה ל-task | 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; } |
| Pattern matching | if (obj is Dog d) { d.Bark(); } |
התחביר, ה-collections ושאילתות ה-LINQ של C# שהכי שימושיים, בעמוד אחד. ה-C# cheat sheet הזה הוא דף עזר מהיר לכתיבת C#: טיפוסי הנתונים, בקרת זרימה, מחלקות, ה-collections List/Dictionary, LINQ, ודפוסי ה-properties וה-async שמאפיינים קוד .NET אידיומטי.
כל מה שכאן הוא C# סטנדרטי על .NET ורץ עם ה-CLI של dotnet. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של C#, בלי להתקין SDK.