#C (נהגה C Sharp או סִי שַׁארְפּ) היא שפת תכנות עילית, רב-פרדיגמית (כלומר תומכת בסגנונות תכנות שונים). השפה מונחית-עצמים בעיקרה, כל דבר מתואר כאובייקט, ומשלבת טיפוסיות חזקה (המהדר בודק סוגי נתונים), סגנונות אימפרטיביים, פונקציונליים, פרוצדורליים וגנריים. נוצרה על ידי מיקרוסופט בתחילת שנות ה-2000 כחלק מפרויקט דוט נט (.NET), בהובלת אנדרס הלסברג. תקנונה בוצע על ידי Ecma ו-ISO באמצע שנות ה-2000. נכון למאי 2024 הגרסה העדכנית היא C# 12.
C# פותחה אחרי סכסוך משפטי סביב J++ של מיקרוסופט. צוות בראשות אנדרס הלסברג החל לעבוד ב-1999, והגרסה הראשונה הושקה עם הכרזת דוט נט ב-2000. מאז נוספו גרסאות חשובות: 1.1 (2003) הביאו שיפורים ב-ASP.NET ובתשתיות; 2.0 (2006) הוסיפה גנריות; 3.0 (2007) הוסיפה ביטויי למדא ו-LINQ; 4.0 (2010) הוסיפה טיפוסים דינמיים; 5.0 (2012) הוסיפה תמיכה באסינכרוניות; 9.0 (2020) הביאה רשומות (records); וגרסאות מאוחרות המשיכו להרחיב תכונות שפתיות.
יש דמיון חזק לג'אווה: מכונה וירטואלית, קוד ביניים, JIT (הידור בזמן ריצה), ניהול זיכרון ופינוי אשפה. עם זאת קיימים הבדלים בעיצוב המנגנונים, בגישה לגנריות ובתכונות נוספות שנוספו ל-C# לאורך הזמן.
C# נועדה להציע תחביר מוכר (בהשראת ++C) ולשלב רעיונות מעולמות שונים, כדי לתת שפה מודרנית, בטוחה ונוחה לפיתוח יישומים שולחניים, אינטרנטיים וניידים.
שם השפה נועד להצביע על "שדרוג" של שפת C. היא תוכננה להשתלב בסביבת דוט נט, אך קיימות מימושים חלופיים כמו Mono ו-Xamarin.
הטיפוסיות ב-C# היא סטטית (המהדר יודע את סוגי המשתנים בזמן הידור), אך יש תמיכה גם בטיפוס דינמי בשם dynamic שמאפשר החלטות בזמן ריצה. קיימת גם מילת המפתח var להסקת טיפוס אוטומטית בהקשרים מסוימים. אזורים שמאופיינים כ-unsafe מאפשרים גישה ישירה לזיכרון באמצעות מצביעים.
טיפוסי ערך (value types) מחזיקים את הנתונים עצמם. טיפוסי ייחוס (reference types) מחזיקים הפניה לאובייקט בזיכרון. המשמעות היא שבלמידה או בהשמה נוצר הבדל בהתנהגות ובהעתקה.
העברה רגילה היא על פי ערך: עבור טיפוס ערך מועתק הערך, ועבור טיפוס ייחוס מועתקת ההפניה. אפשר להשתמש ב-ref ו-out כדי להעביר משתנה ללא העתקה.
יש const לקבוע המאותחל בזמן הקישור, ו-readonly שניתן לאתחל בזמן ריצה בבנאי. קיימים טיפוסים בוליאניים, שלמים (byte, int, long), נקודות צפות (float, double, decimal), ותווים ומחרוזות (char, string).
ניתן להגדיר מערכים חד-ממדיים, רב-ממדיים ולממש מערכים משוננים (Jagged arrays) שבהם כל איבר הוא מערך בגודל משלו.
Tuple מאפשר לארוז יחד ערכים מסוגים שונים לחזרה מפונקציה. נתוני ה-Tuple לקריאה בלבד ומוגבלים במספר הפריטים.
יש משפטי תניה (if, switch) ולולאות (for, foreach, while, do while). foreach נוח לעבודה על אוספים.
C# תומכת בכימוס (Encapsulation), ירושה ופולימורפיזם בזמן ריצה. המחלקה (class) היא המבנה המרכזי. קיימים ממשקים (Interfaces), חוזים שמחייבים מימוש מתודות.
מחלקה יכולה לרשת ממחלקה אחת בלבד ולממש מספר ממשקים. קיימת ירושה ציבורית בלבד.
שיטות מאוגדות במחלקות או במבנים. ניתן להגדיר מתודות סטטיות (static) כמקבילות לפונקציות גלובליות. יש async למתודות אסינכרוניות.
רמות גישה כוללות private, public, internal, protected, protected internal ו-private protected. קיימת אפשרות לפצל מחלקה ל-partial.
מאפיינים מאפשרים גישה מבוקרת לשדות פרטיים בעזרת get ו-set. קיימים מאפיינים אוטומטיים לפשטות.
ניתן להעמיס אופרטורים כדי לשנות את משמעותם על טיפוסים מותאמים. יש גם סדרנים (Indexers) לטיפוסי אוסף.
רשומות (records) הן טיפוסי ייחוס שמיועדים לאחסון ערכים בלבד. השוואה בין רשומות משווה ערכים ולא הפניות.
אירועים (events) מבוססים על Delegate, טיפוס הכומס פונקציות. הם מאפשרים תכנות מונחה-אירועים והודעות בין אובייקטים.
Delegate הוא טיפוס שמייצג פונקציה. C# תומכת בפונקציות אנונימיות ובביטויי למדא (lambda), המשמשים רבות ב-LINQ לעיבוד אוספים.
גנריות מאפשרות להגדיר מחלקות ומתודות המקבלות טיפוסים כפרמטרים. ב-C# הגנריות נשמרות גם בזמן ריצה, כך שהמידע על הפרמטרים זמין.
טיפוס dynamic והמחלקות ב-System.Dynamic מאפשרים הוספה ושינוי של מאפיינים ושיטות בזמן ריצה. התמיכה מבוססת על DLR ולא על CLR.
C# ותשתית דוט נט תומכות בפיתוח חזותי עם WinForms ו-WPF, כולל דיוור פקדים (controls) ועבודה בעורך חזותי של Visual Studio. באמצעות Xamarin אפשר לפתח אפליקציות חוצות פלטפורמות.
C# משתמשת בזיכרון מנוהל: CLR אחראית על שחרור זיכרון. Garbage collection (איסוף זבל) מסיר עצמים שאינם נגישים עוד. זה מקל על מפתחים, אך אינו מחליף טיפול במשאבים חיצוניים.
טיפול בחריגות נעשה עם try-catch-finally. ניתן לזרוק Exception, אובייקט שמציין שגיאה.
נכללו כינויים וקטליוגיות שנועדו להקל מעבר מ-++C, כמו כינויי טיפוסים (uint ועוד). יש דוגמאות לכך במערכת הטיפוסים.
C# התפתחה בגרסאות רבות המשודרגות עם מהדורות .NET ו-Visual Studio. גרסאות מרכזיות הוזכרו לעיל, וכל גרסה הוסיפה תכונות שפתיות וספרייתיות.
using System;
public class ExampleClass
{
public static void Main(string[] args)
{
Console.WriteLine("Hello world!");
}
}
C# (סִי שַׁארְפּ) היא שפת תכנות שעוזרת לבנות תוכנות. מיקרוסופט יצרה אותה ב-2000. דוט נט (.NET) הוא ערכה שמכילה כלים וספריות לעבודה.
אנדרס הלסברג הוביל את הפיתוח. השפה נועדה להחליף שפות ישנות ולהקל על כתיבת תוכנות.
C# עובדת עם "אובייקטים". אובייקט הוא קופסה שמכילה נתונים ופעולות. זה עוזר לארגן קוד.
יש טיפוסים למספרים, מחרוזות ותווים. המהדר (התוכנה שבודקת קוד) בודק שכולם מתאימים.
יש איסוף זבל (Garbage collection). זה אומר שהמחשב משחרר זיכרון שלא בשימוש לבד.
יש if לניתוח תנאים. יש for ו-foreach לחזרה על רשימות.
שיטה היא קטע קוד שמבצע פעולה. יש שיטות סטטיות שנקראות בלי להכין אובייקט.
אירוע הוא הודעה שמחלקה יכולה לשלוח. Delegate (נציג) הוא סוג שמכיל פונקציות.
יש תמיכה בפונקציות קצרות שנקראות למדא, בהרשומות (records) לאחסון נתונים וב-async לעבודה שקטה ברקע.
Console.WriteLine("Hello world!");
C# עוזרת לבנות משחקים, אפליקציות ואתרים. היא פשוטה יחסית ללמידה ומותאמת לעבוד עם כלים חזותיים.
תגובות גולשים