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

מדריך C# – תכנות מונחה עצמים: ממשקים – Interfaces

‏ • John Bryce

interface (ממשק) הינו מבנה לוגי מופשט (אבסטרקטי) המכיל רק הצהרות.

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

 

דוגמא ל- interface:

  interface IPrint
  {
    string Print();
  }

דגשים חשובים לגבי interface

  • אינו יכול להכיל משתנים או מימושים (פונקציות עם תוכן) אלא רק הצהרות. המחלקות/מבנים שירשו את ה- interface הם אלה שיממשו את ההצהרות.
  • כאשר נממש (נירש) interface חובה לממש את כל ההצהרות שבו
  • ניתן לרשת רק מחלקה אחת ובנוסף ניתן לרשת ולממש מספר בלתי מוגבל של interfaces
  • לא ניתן ליצור אובייקט מ- interface אלא רק ייחוס (reference)
  • גם struct יכול לרשת מ- interface
  • נהוג ששם של interface יתחיל באות I

 

דוגמא למימוש interface:

  class Person : IPrint
  {
    public string Print()
    {
      return "Hello";
    }
  }

דוגמא לשימוש ב- interface:

   IPrint p = new Person();
   Console.WriteLine(p.Print());

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

בסביבת ה- NET. יש מספר רב של interface המאפשרים להשתמש בשירותים שונים הקיימים בסביבה. להלן דוגמא לכמה מהם:

  • IComparable
  • IComparer
  • IEnumerable
  • IEnumerator

ניקח כדוגמא את הממשק IComparable המספק פונקציה אחת להשוואה בין אובייקטים:

  public interface IComparable
  {
    int CompareTo(object obj);
  }

להלן התיעוד של הפונקציה CompareTo המסביר מה צריך להיות הערך החוזר:

//The return value has these meanings:
//Value Meaning Less than zero This instance is less than obj.
//Zero This instance is equal to obj.
//Greater than zero This instance is greater than obj.

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

לדוגמא נבנה מחלקה Person ונבצע את ההשוואה לפי הגיל:

 

  public class Person : IComparable
  {
    public int Age { get; set; }

    public string Print()
    {
      return string.Format("Age: {0}", Age);
    }

    public int CompareTo(object obj)
    {
      Person p = (Person)obj;

      if (Age < p.Age)
        return -1;

      if (Age > p.Age)
        return 1;

      return 0;
    }
  }

עכשיו ניתן להשתמש בשירות Sort הקיים במחלקה Array אשר משתמש ב- interface כדי לבצע את ההשוואה:

 

 class Program
  {
    static void Main(string[] args)
    {
      Person[] persons = new Person[]
      {
        new Person() { Age = 25 },
        new Person() { Age = 17 },
        new Person() { Age = 30 }
      };

      Console.WriteLine("Before Sorting:");
      foreach (Person p in persons)
        Console.WriteLine(p.Print());

      Array.Sort(persons);

      Console.WriteLine("\nAfter Sorting:");
      foreach (Person p in persons)
        Console.WriteLine(p.Print());
    }
  }

 

בפלט ניתן לראות את מצב המערך לפני ואחרי המיון:

 

Interfaces - פלט לפני ואחרי המיון

תגיות: , ,

ליאור זמיר

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

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

חדש! אחסון אתרים של וובמאסטר

שירות אחסון אתרים
המקצועי של וובמאסטר!

מומחים באירוח אתרי
WordPress, Joomla, Drupal

  • שרתי לינוקס עם CloudLinux, LiteSpeed
  • 1GB דיסק SSD, 10GB תעבורה חודשית
  • ממשק ניהול cPanel, תעודת SSL חינם

עכשיו במחיר היכרות:
רק 420 ש"ח לשנה!