C# (נהגית "סי שארפ") היא שפת תכנות כללית שתוכננה ב-Microsoft על ידי צוות בהובלת אנדרס הלסברג, ושוחררה לראשונה ב-2002. היא בעלת טיפוסים סטטיים (לכל משתנה יש טיפוס שהקומפיילר בודק לפני שהתוכנית רצה), מונחית עצמים (הקוד מאורגן במחלקות), ומנוהלת (אוסף זבל משחרר זיכרון בשבילכם). C# מודרנית גם שואבת הרבה מתכנות פונקציונלי: ביטויי למדה, שאילתות LINQ, התאמת תבניות ו-records בלתי ניתנים לשינוי.
הנה תוכנית C# שלמה. לחצו על Run:
פלט:
Hello, Ada! It is 2026.
למה משתמשים ב-C#
C# היא שפה כללית, כך שהיא נמצאת ברוב סוגי התוכנה, אבל כמה תחומים אחראים לרוב השימוש בה:
- משחקים. Unity, אחד ממנועי המשחקים הנפוצים ביותר, מתוכנת ב-C#. גם Godot תומך בה.
- צד שרת של אתרים. ASP.NET Core היא ספריית ה-web של .NET עבור APIs, אתרים ואפליקציות בזמן אמת. היא אחת מספריות ה-web המרכזיות המהירות ביותר בבנצ'מרקים ציבוריים.
- אפליקציות שולחן עבודה. WPF ו-Windows Forms ב-Windows, .NET MAUI ו-Avalonia בין פלטפורמות.
- ענן ושירותים. Azure Functions, workers ברקע, מיקרו-שירותים בקונטיינרים.
- כלים ואוטומציה. כלי שורת פקודה, סקריפטים של build, עיבוד נתונים.
היא נפוצה במיוחד בחברות ארגוניות שעובדות על טכנולוגיה של Microsoft ובאולפני משחקים. אפליקציות מובייל אפשריות עם .NET MAUI (היורשת של Xamarin), אבל זו נישה קטנה יותר מ-Kotlin או מ-Swift.
C# ו-.NET הם לא אותו דבר
C# היא השפה. .NET היא הפלטפורמה שמריצה אותה, ויש לה שלושה חלקים:
- סביבת הריצה (CLR). הקומפיילר של C# לא מייצר קוד מכונה. הוא מייצר Intermediate Language (IL), שנשמר בקבצי
.dllאו.exe. כשהתוכנית רצה, ה-Common Language Runtime מקמפל את ה-IL לקוד native בדיוק בזמן (JIT), מנהל את הזיכרון עם אוסף זבל, ואוכף בטיחות טיפוסים. - ספריית המחלקות הבסיסית. אוספים, גישה לקבצים, רשת, טקסט, תאריכים, תהליכונים: כל מה שתחת
System.*. - ה-SDK. הפקודה
dotnetשיוצרת, בונה, בודקת ומריצה פרויקטים.
שפות אחרות מתקמפלות לאותו IL (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# מורכבת מטיפוסים (מחלקות, structs, ממשקים, enums, records) שמכילים איברים (שדות, מאפיינים, מתודות). הביצוע מתחיל במתודה סטטית בשם Main. מרחבי שמות מקבצים טיפוסים קשורים, והנחיות using מאפשרות לפנות אליהם בשמות קצרים.
פלט:
Maya: 21.00
Leo: 13.00
כמה דברים כבר נראים כאן: Order היא מחלקה עם שני מאפיינים (Customer, Total), בנאי ומתודה. decimal הוא הטיפוס לכסף, והסיומת m מסמנת ליטרל decimal. var מאפשר לקומפיילר להסיק את הטיפוס של משתנה מקומי, ו-List<Order> הוא אוסף גנרי שמקבל רק אובייקטים מסוג Order. ה-{order.Total:F2} שבתוך $"..." מעצב מספר עם שתי ספרות אחרי הנקודה.
בפרויקט אמיתי כל מחלקה חיה בדרך כלל בקובץ משלה, והקבצים מתקמפלים יחד ל-assembly אחד. ראו מחלקות ואובייקטים לפרטים.
טיפוסים סטטיים בפועל
הקומפיילר יודע את הטיפוס של כל ביטוי, כך שמחלקה גדולה של טעויות לעולם לא מגיעה לתוכנית שרצה. השמה של מחרוזת ל-int, קריאה למתודה שלא קיימת, או העברת ארגומנטים בסדר הלא נכון נכשלות בזמן קומפילציה עם שגיאה שמצביעה על השורה.
פלט:
29.97
45
הטיפוסים גם מניעים את העורך: השלמה אוטומטית, שינוי שם ו-"find all references" מדויקים ב-C# כי הכלים קוראים את אותו מידע טיפוסים שהקומפיילר קורא.
גרסאות C# ומה הן הוסיפו
מאז C# 9 ב-2020, גרסה חדשה יוצאת בכל נובמבר יחד עם גרסה חדשה של .NET; לפני כן, גרסאות יצאו כל שנתיים עד שלוש. כל גרסה מתוכננת כך שקוד קיים ימשיך להתקמפל, והחריגים הנדירים (כמו field שהפכה למילת מפתח בתוך accessors של מאפיינים ב-C# 14) מתועדים כשינויים שוברים, כך שתוכנית שנכתבה ל-C# 2 כמעט תמיד מתקמפלת היום בלי שינוי.
| גרסה | שנה | תוספות בולטות |
|---|---|---|
| C# 2 | 2005 | Generics, טיפוסי ערך שמאפשרים null (int?), איטרטורים (yield) |
| C# 3 | 2007 | LINQ, ביטויי למדה, var, מאתחלי אובייקטים, מתודות הרחבה |
| C# 4 | 2010 | dynamic, פרמטרים אופציונליים ופרמטרים עם שם |
| C# 5 | 2012 | async ו-await |
| C# 6 | 2015 | אינטרפולציית מחרוזות $"...", nameof, null-conditional ?. |
| C# 7 | 2017 | Tuples, out var, התאמת תבניות עם is, מפרידי ספרות |
| C# 8 | 2019 | טיפוסי הפניה שמאפשרים null, ביטויי switch, טווחים s[1..4], ??=, זרמים אסינכרוניים |
| C# 9 | 2020 | Records, accessors מסוג init, top-level statements, new() עם טיפוס יעד |
| C# 10 | 2021 | Global usings, מרחבי שמות ברמת קובץ, record structs |
| C# 11 | 2022 | Raw string literals """, איברי required, תבניות רשימה |
| C# 12 | 2023 | בנאים ראשיים למחלקות, ביטויי אוסף [1, 2, 3] |
| C# 13 | 2024 | אוספי params, הטיפוס System.Threading.Lock |
| C# 14 | 2025 | איברי הרחבה, מילת המפתח field במאפיינים |
גרסאות חדשות בעיקר מסירות טקסים. התוכנית הזו, ל-C# 9 ומעלה, משתמשת ב-top-level statements (בלי class Program, בלי Main), ב-record ובביטוי 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#?
ל-Web APIs ולאתרים עם ASP.NET Core, למשחקים עם Unity (שפת הסקריפטים שלו היא C#), לאפליקציות שולחן עבודה ל-Windows עם WPF ו-WinForms, לאפליקציות חוצות פלטפורמות עם .NET MAUI, לשירותי ענן ול-Azure Functions, ולכלי שורת פקודה. היא נפוצה בתוכנה ארגונית ובאולפני משחקים.
האם קשה ללמוד C#?
היא שפה ראשונה בדרגת קושי בינונית. התחביר בסגנון C ומחמיר יותר מ-Python, כי לכל משתנה יש טיפוס שהקומפיילר בודק, אבל הזיכרון מנוהל בשבילכם והודעות השגיאה ברורות. רוב המתחילים יכולים לכתוב תוכניות קונסולה שימושיות אחרי כמה שבועות של תרגול.
האם עדיין כדאי ללמוד C#?
כן. C# נמצאת באופן עקבי בין השפות הנפוצות ביותר בסקרי מפתחים, .NET היא קוד פתוח וחוצת פלטפורמות, והשפה מקבלת גרסה חדשה בכל נובמבר. זו הבחירה המעשית אם רוצים לפתח משחקים ב-Unity או לעבוד בחברות שבנויות על טכנולוגיה של Microsoft.