מדריך C# מונחה עצמים

מדריך C# – תכנות מונחה עצמים: אלמנטים סטטיים

‏ • John Bryce

 

משתנה סטטי

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

  • משתנה סטטי הוא משתנה שיש לו רק מופע אחד בלבד והוא משותף לכל המחלקה (בניגוד למשתנה רגיל ה'משוכפל' עבור כל אובייקט מהמחלקה).
  • משתנה סטטי נמצא רק פעם אחת בזיכרון, לא משנה כמה מופעי אובייקטים יש למחלקה.
  • כדי להגדיר משתנה כסטטי יש להוסיף את המילה השמורה static בעת ההצהרה עליו.

להלן דוגמא להגדרת משתנה static אשר יכיל את מספר האובייקטים שנוצרו מהמחלקה Grade, כך שבכל פעם שניצור אובייקט (בתוך ה- c'tor) המשתנה יקודם ב- 1 (לצורך הפשטות מופיע רק הקוד הרלוונטי):

 

  class Grade
  {
    public static int counter;

    public Grade()
    {
      //...
      counter++;
    }
  }

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

Console.WriteLine(Grade.counter);

מאפיין סטטי

באותה שיטה ניתן להגדיר כל אלמנט שלמדנו עליו בנושא מחלקות כסטטי:  Property, Method, C'tor.

כדי להגדיר מאפיין (Property) כסטטי יש להוסיף את המילה השמורה static בכותרת המאפיין.

להלן דוגמא להגדרת static property . המאפיין הסטטי חושף את המשתנה הסטטי:

    private static int counter;

    public static int Counter
    {
      get { return counter; }
    }

גם כאן הגישה היא באותה שיטה (דרך שם המחלקה):

    Console.WriteLine(Grade.Counter);

פונקציה סטטית

פונקציה סטטית היא פונקציה שמופעלת על המחלקה כולה ולא על מופע בודד (אובייקט) של המחלקה.

  • כדי להגדיר פונקציה כסטטית יש להוסיף את המילה השמורה static בכותרת הפונקציה.
  • פונקציה סטטית שייכת למחלקה ולא לאובייקט (מופע) מסוים של המחלקה, לכן כדי לגשת לפונקציה סטטית דרך התוכנית הראשית נעשה זאת דרך שם המחלקה וציון הפונקציה (בניגוד לפונקציה לא-סטטית בה הגישה היא דרך שם האובייקט וציון הפונקציה).
  • דוגמאות לפונקציות סטטיות: חישוב מינימום, מקסימום, ממוצע, סכום, ספירה…

דוגמא לפונקציה סטטית המחשבת ממוצע (ולשם כך משתמשת במשתנים סטטיים):

  class Grade
  {
    //Static Data members:
    static int counter;
    static int sum;

    //Static Method:
    public static double Average()
    {
      return (double)sum / counter;
    }
  }

קריאה לפונקציה זו סטטית תתבצע כך:

Console.WriteLine(Grade.Average());


מחלקה סטטית

ניתן להגדיר גם static class, המשמעות היא:

  • כל מה שנמצא במחלקה חייב להיות static (משתנים, פונקציות, מאפיינים…)
  • לא ניתן ליצור מופעים (אובייקט) מהמחלקה
  • לא ניתן לרשת מהמחלקה

משתמשים במחלקה סטטית בעיקר ליצירת מחלקות עזר שיכילו פונקציות שירות. דוגמא למחלקות כאלו מתוך ה- NET Framework. :

  • Math – פונקציות וקבועים מתמטיים
  • Console – לעבודה עם מסך ה- Console

תגיות: , ,

ליאור זמיר

כיום אני ה- Webmaster של תוכנית החדשנות של HPE Software.לפני כן, הייתי מנהל תחום Webmaster ומרצה בכיר בג'ון-ברייס (במשך 9 שנים) בקורסים לפיתוח ותיכנות באמצעות Microsoft .NET, מולטימדיה, בניית אתרי אינטרנט ואינטראנט. פיתוח הדרכה ומתן ייעוץ טכנולוגי.

תגובות בפייסבוק