שיעורים סטטיים וחברי כיתה סטטיים ב- C # הסבירו

מילת המפתח הסטטית בשפת התכנות C # מאפשרת לך להגדיר מחלקות סטטיות וחברים סטטיים.

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

אין התנהגות בכיתה סטטית או בחבר, ולכן אין טעם לאפשר גם מחלקה סטטית לעבור בירושה. מחלקה סטטית יכולה לכלול רק איברים סטטיים - אינך יכול להכריז על חברי מופע (שיטות, משתנים, מאפיינים וכו ') במחלקה סטטית. אתה יכול לקבל בנאי סטטי בכיתה סטטית, אך לא יכול להיות לך בנאי מופע בתוך מחלקה סטטית.

מתי להשתמש בכיתה סטטית ב- C #

מתי כדאי ללכת לשיעור סטטי? בדרך כלל אתה יכול ליישם שיעורי עוזר או כלי עזר כשיעורים סטטיים מכיוון שהם לא צריכים להיות מיוצרים או עוברים בירושה ובדרך כלל מכילים אוסף של כמה שיטות ומאפיינים לשימוש חוזר. רישום הקוד הבא ממחיש כיצד נראית מחלקה סטטית ב- C #.

מחלקה סטטית ציבורית FileLogger

    {

        יומן ריק סטטי ציבורי (הודעת מחרוזת)

        {

            // שיטה לרישום נתונים בקובץ טקסט

        }

    }

מתי להשתמש בשיטות סטטיות ב- C #

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

מדוע עלינו להשתמש בשיטות סטטיות? הם מהירים יותר בביצוע מאשר שיטות לא סטטיות, כלומר שיטות מופע. הסיבה היא שזמן הריצה מעביר את thisהמצביע כפרמטר מרומז לשיטות הלא סטטיות או מופע. שים לב כי בשיטה לא סטטית המהדר פולט את callvirtההוראה גם אם השיטה אינה וירטואלית. אם אתה הופך את השיטות שלך לסטטיות, המהדר פולט callאתרים שאינם וירטואליים , מה שמבטל את הבדיקה הנוספת אם המופע הוא ריק. זה עשוי להעניק לך כמה יתרונות ביצועים.

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

קטע הקוד הבא ממחיש כיצד נראית שיטה סטטית.

יומן ריק סטטי ציבורי (הודעת מחרוזת)

        {

             מחרוזת filePath = @ "F: \ Log.txt";

            באמצעות (StreamWriter streamWriter = StreamWriter חדש (filePath, נכון))

            {

                streamWriter.WriteLine (הודעה);

                streamWriter.Close ();

            }

        }

כיצד להשתמש בחברים סטטיים בכיתה ב- C #

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

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

מחלקה סטטית ציבורית FileLogger

    {

        נעילת אובייקט סטטית קריאה פרטית lockObject = אובייקט חדש ();

        מחרוזת סטטית ציבורית FilePath

        {

            לקבל; מַעֲרֶכֶת;

        }

        יומן ריק סטטי ציבורי (הודעת מחרוזת)

        {

            נעילה (lockObject)

            {

                אם (! string.IsNullOrEmpty (FilePath))

                באמצעות (StreamWriter streamWriter = StreamWriter חדש (FilePath, נכון))

                {

                    streamWriter.WriteLine (הודעה);

                    streamWriter.Close ();

                }

            }

        }

    }

שימו לב לשימוש במאפיין הסטטי ששמו FilePath. כדי להבטיח בטיחות חוטים, lockמילת המפתח שימשה. בוצעה בדיקה Log()בשיטה כדי לוודא שערך FilePathהנכס אינו ריק ואינו ריק.

זכור שכאשר מהירות היישום היא מהותית, ייתכן שישתלם להשתמש בשיטות סטטיות. אתה יכול להשתמש בהם גם בכיתות סטטיות וגם בשיעורים לא סטטיים.