Menu
Coddy logo textTech

שדות ומתודות סטטיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 12 מתוך 70.

עד כה, כל השדות והמתודות שיצרנו שייכים לאובייקטים יחידים. אבל לפעמים צריך נתונים או התנהגות ששייכים למחלקה עצמה ומשותפים לכל המופעים. כאן נכנסת לתמונה מילת המפתח static.

שדה סטטי משותף לכל האובייקטים של מחלקה. יש רק עותק אחד, בלי קשר למספר המופעים שתיצרו:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

בכל פעם שנוצר Player חדש, TotalPlayers גדל. כל השחקנים חולקים את אותו מונה.

מתודה סטטית שייכת למחלקה ואפשר לקרוא לה בלי ליצור אובייקט:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// נקראת על המחלקה, לא על מופע
int result = Calculator.Add(5, 3);

שימו לב: ניגשים לחברים סטטיים באמצעות שם המחלקה, ולא באמצעות הפניה לאובייקט. מתודות סטטיות אינן יכולות לגשת לשדות מופע או להשתמש ב־this, מכיוון שהן אינן שייכות לאובייקט מסוים.

כבר השתמשת בחברים סטטיים בלי לשים לב. Console.WriteLine() היא מתודה סטטית, ו-Math.PI הוא שדה סטטי.

challenge icon

אתגר

קל

בואו נבנה מערכת למעקב אחר הזמנות, שמשתמשת בחברים סטטיים כדי לעקוב אחר כל ההזמנות שבוצעו באפליקציה שלכם.

תיצרו שני קבצים כדי לארגן את הקוד שלכם:

  • Order.cs: הגדירו מחלקת Order במרחב השמות OrderSystem. לכל הזמנה צריכה להיות תכונת מופע OrderId (int) ו-CustomerName (string). המחלקה צריכה גם לעקוב אחר המספר הכולל של ההזמנות שנוצרו באמצעות השדה הסטטי TotalOrders, ולספק את המתודה הסטטית GetNextOrderId(), שמחזירה את מזהה ההזמנה הזמין הבא (החל מ-1). הבנאי צריך לקבל שם לקוח, להקצות אוטומטית את מזהה ההזמנה באמצעות המתודה הסטטית, ולהגדיל את מספר ההזמנות הכולל.
  • Program.cs: בקובץ הראשי שלכם, צרו הזמנות על סמך קלט והציגו את הפרטים שלהן לצד מספר ההזמנות הכולל.

תקבלו שני קלטים שמייצגים שמות לקוחות עבור שתי הזמנות נפרדות.

עבור כל הזמנה, הדפיסו את הפרטים שלה בפורמט הבא:

Order #{OrderId} - Customer: {CustomerName}

לאחר יצירת שתי ההזמנות, הדפיסו את המספר הכולל:

Total Orders: {TotalOrders}

לדוגמה, אם הקלטים הם Alice ו-Bob, הפלט צריך להיות:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

נסו בעצמכם

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // קראו את שמות הלקוחות
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: צרו שני אובייקטים מסוג Order עם שמות הלקוחות

        // TODO: הדפיסו את פרטי כל הזמנה בפורמט:
        // Order #{OrderId} - לקוח: {CustomerName}

        // TODO: הדפיסו את המספר הכולל של ההזמנות בפורמט:
        // Total Orders: {TotalOrders}
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין