C # 7 לעומק: חקר פונקציות מקומיות

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

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

דמיין מצב שתזדקק לפונקציית עוזר שתיקרא רק פעם אחת. לפני C # 7 היה בסביבה, היית יכול להשיג את זה באמצעות סוגי Func ו- Action בשיטות אנונימיות. עם זאת, היו כמה אתגרים. הם לא תמכו בגנריות, פרמדים ופרמטרים של ref ו- out.

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

יישום פונקציות מקומיות ב- C #

בואו נכתוב קצת קוד ונראה כיצד פועלות פונקציות מקומיות. שקול את קטע הקוד הבא. שים לב ששיטת Sum מוגדרת בתוך גוף השיטה Main בקטע הקוד שלהלן.

 static void Main(string[] args)

        {

            int Sum(int x, int y)

            {

                return x + y;

            }

            Console.WriteLine(Sum(10, 20));

            Console.ReadKey();

        }

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

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

public static void Display(string str)

        {

            int ctr = 5;

            DisplayText();

            void DisplayText ()

            {

                for(int i = 0; i < ctr; i++)

                Console.WriteLine(str);

            }

        }

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

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