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

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

שיטות ההרחבה הנפוצות ב- .Net כוללות את מפעילי השאילתות הסטנדרטיים של LINQ המוסיפים יכולות שאילתה נוספות System.Collections.IEnumerable and System.Collections.Generic.IEnumerableלסוגים. שים לב שאתה יכול לנצל את שיטות ההרחבה כדי להרחיב מחלקה או ממשק, אך אינך יכול לעקוף את השיטות שלהם. ה- MSDN קובע: "שיטות הרחבה מאפשרות לך" להוסיף "שיטות לסוגים קיימים מבלי ליצור סוג נגזר חדש, להרכיב מחדש או לשנות את הסוג המקורי בדרך אחרת. שיטות הרחבה הן סוג מיוחד של שיטה סטטית, אך הן נקראות כאילו הן היו שיטות מופע בסוג המורחב. "

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

כשאתה עובד בשיטות הרחבה, זכור את הנקודות הבאות:

  • שיטת הרחבה חייבת להיות שיטה סטטית
  • שיטת הרחבה חייבת להיות בתוך מחלקה סטטית - למחלקה יכול להיות כל שם
  • הפרמטר בשיטת הרחבה אמור לכלול את מילת המפתח "זה" לפני הסוג אליו יש לקרוא לשיטה

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

תכנות שיטות הרחבה ב- C #

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

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

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

כך תוכל להשתמש בשיטת ההרחבה IsNumeric במופע מחרוזת.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

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

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

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

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

וכאן תוכל להשתמש בשיטת ההרחבה IsEven במספר שלם.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");