تغییر ایجاد کن

طبقه بندی موضوعی
چهارشنبه, ۱۸ مرداد ۱۳۹۶، ۱۰:۳۵ ق.ظ

Interface چیست؟

ارث بردن از یک کلاس، مکانیزم قدرتمندی است اما قدرت واقعی وراثت از ارث بردن از یک Interface می آید. Interface ها دلیل اصلی وجود وراثت هستند. یک Interface به شما امکان می دهد تا اسم متد را کاملا از پیاده سازی آن جدا کنید. Interface  به شما می گوید که اسم متد چیست. این که متد چگونه پیاده سازی شود به Interface مربوط نیست. 

مَخلص کلام این که اگه خواستیم که کلاس های ما از یک سری قوانین خاص پیروی کنند، یک Interface  تعریف نموده و کلاس ها از آن به ارث برده می شوند.

روی نام سولوشن کلیک راست کرده و از گزینه ی Add گزینه ای به نام Interface را انتخاب کرده و نامی برای آن در نظر میگیریم. طبق استاندارد مایکروسافت دو حرف اول آن را بزرگ در نظر میگیریم هم چنین حرف اول آن باید I باشد. و درون آن فقط یک متد تعریف می کنیم.

interface ITest

    {

        string Test();

 

    }

سه کلاس به نام های Student وPersonوTeacher ایجاد میکنیم. و در Student کد زیر را مینویسیم تا این کلاس از Interface ارث برده شود. 

//student class

class Student:ITest

    {

        #region ITest Members

 

        public string Test()

        {

            return "student";

        }

 

        #endregion

    }

 

بعد از نوشتن نام Interface یک علامت زیر آن ایجاد می شود(همان قسمتی که با فلش مشخص شده)  که اگر روی آن ماوس را نگه داریم دو گزینه ظاهر می شود و ما گزینه اول را که Implement می باشد را انتخاب میکنیم .  مشاهده میکنیم که یک متد هم نام همان متدی که در Interface تعریف کرده بودیم ایجاد میشود. ما نمیتوانیم نوع برگشتی متد را در این قسمت تغییر دهیم چون باید از قوانین Interface  پیروی کنیم.

برای سایر کلاس ها هم همین کار رو انجام می دهیم و به جای کدی که درون متد ایجاد می شود کد مورد نظر خودمان را قرار می دهیم.

//teacher class

class Teacher : ITest

    {

 

 

        #region ITest Members

 

        public string Test()

        {

            return "teacher";

 

        #endregion

        }

    }

 

//Person class

class Person:ITest

    {

        #region ITest Members

 

        public string Test()

        {

            return "Person";

        }

 

        #endregion

    }

 

حالا در متد main برنامه کد زیر را جهت  نمایش می نویسیم.

class Program

    {

        static void Main(string[] args)

        {

            Person Person_1 = new Person();

            Student Student_1 = new Student();

            Teacher Teacher_1 = new Teacher();

 

            object[] List = new object[] { Person_1, Student_1, Teacher_1 };

            foreach (ITest II in List)

            {

                Console.WriteLine(II.Test());

            }

            Console.ReadKey();

        }

 

می توانیم به جای استفاده از حلقه ی Foreach برای نمایش مقادیر، کد زیر را بنویسیم.

Console.WriteLine(Person_1.Test());

 Console.WriteLine(Student_1.Test());

            Console.WriteLine(Teacher_1.Test());

 

 

مشابه مفهوم Interface  مفهوم دیگری به نام Abstract وجود دارد. یک کلاس جدید به وجود می آوریم و فقط قبل نام آن کلمه ی Public abstract را قرا ر می دهیم. مانند سایر کلاس ها سه پراپرتی برای آن تعریف نموده و پراپرتی سوم که جهت نمایش نام و نام خانوادگی است را abstract میکنیم.

public abstract class Person

    {

        public string Name { get; set; }

        public string Family { get; set; }

        public abstract string FullName { get; set; }

    }

حالا در متد Main یک شی ء از کلاس Person  می سازیم. اما با خطا مواجه می شود، مبنی بر این که نمی توان یک نمونه یا یک آبجکت از یک abstract class یا یک Interface ساخت. چرا؟چون این کلاس انتزاعی است و دلیلی ندارد که از آن آبجکت ساخته شود . بلکه باید کلاس دیگری ایجاد کرد که از کلاس Person به ارث رفته است.

class Student:Person

    {

        public override string FullName

        {

            get

            {

                return string.Format("{0}{1}", Name, Family);

            }

            set

            {

                throw new NotImplementedException();

            }

        }

    }

 

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی