כיצד ליישם פולימורפיזם ב- C #

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

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

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

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

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

פולימורפיזם פרמטרי

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

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

public enum Severity

    {

        Informational, Warning, Critical

    }

    public class Logger

    {

        public void Log(string message)

        {

            //Some code

        }

        public void Log(string message, Severity severity)

        {

            //Some code

        }

    }

עיין ברישום הקוד לעיל. שים לב כיצד העומס יתר על המידה בשיטת Log (). זו דוגמה לפולימורפיזם זמן.

פולימורפיזם הכללה

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

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

public class Logger

    {

        public virtual void Log(string message)

        {

            Console.WriteLine("Inside the Log method of the base class Logger");

        }

    }

    public class FileLogger : Logger

    {

        public override void Log(string message)

        {

            Console.WriteLine("Inside the Log method of the FileLogger class");

        }

    }

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

static void Main(string[] args)

        {

            Logger logger = new FileLogger();

            logger.Log("Hello World!");

            Console.ReadKey();

        }

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