www.doronamir.com

E-mail: doron@doronamir.com

 

 

מה זה ממשק ?  -  Interface

 

Interface:  ב C# ממשק זה למעשה מחלקה אבסטרקטית המכילה מתודות ומאפיינים אבסטרקטים בלבד

אין צורך  ברישום המילה Abstract , מתודה או מאפיין המוגדר ב Interface הינו אבסטרקטי

 

ה Interface בדומה למחלקה האבסטרקטית מגדיר התנהגות משותפת למחלקות הנגזרות אך בנוסף לכך

 מחלקה יכולה לרשת בו זמנית ממספר interfaces מה שלא ניתן לבצע ממחלקה אבסטרקטית , ב Interface

לא ניתן להגדיר משתנים או לממש פונקציות ומחלקה שיורשת חייבת לממש את המתודות והמאפיינים המוגדרים

 

במחלקה היורשת אין צורך לדרוס ע"י Override אלא רק לממש ע"י כתיבת המתודה כולל המימוש.

 

ה Interface מכיל :Properties \ Indexer  Methods \   בלבד טאינו יכול להכיל הגדרת משתנים או מימוש עבור הנ"ל

הInterface גם אינו יכול להכיל Constructor או כל אופרטור , בנוסף לכך יש לזכור כי איברי ה Interface חשופים

 Public אך אינם מוגדרים עם מציין גישה זה באופן רשום.

 

ה Interface  נאכף ע"י הקומפיילר לכן אם נבצע הורשה מה-interface ללא מימוש נקבל שגיאת קומפילציה.

 

 בדוגמה הנ"ל נראה מימוש של פולימורפיזם ע"י Interface בשם Person  המכיל הגדרת פונקציה ללא מימוש (חתימה)

תהליך מימוש הפולימורפיזם מתבצע ע"י הורשת הממשק ומימוש המתודה Say

בהמשך הקוד הוגדר מערך מסוג Person  המקושר לאובייקטים שונים אחד מסוג F והשי מסוג S

גם בדוגמה זאת הגדרנו reference מסוג Person  אשר רץ על המערך בצורה אחידה ומבצע קריאה למימוש הפונקציה Say

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

using System;

 

public interface Person

{

     void Say();

   

}

class F:Person

{

    public void Say()

    {

    Console.WriteLine("Hello From F Object");

    }

}

 

class S:Person

{

    public void Say()

    {

        Console.WriteLine("Hello From S Object ");

    }

}

 

 

class MainClass

{

    static void Main()

    {

        F x1 = new F();

        S y1= new S();

 

        Person[] Arr = new Person[2];

        Arr[0]=x1;

        Arr[1]=y1;

 

        foreach(Person P1 in Arr)

        {

    P1.Say();

        }

 

        Console.ReadLine();

    }

}