מדריך C# – תכנות מונחה עצמים: ממשקים – Interfaces
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());
}
}
בפלט ניתן לראות את מצב המערך לפני ואחרי המיון:
תגובות בפייסבוק