نحوه استفاده از Interface در سی شارپ

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

نحوه استفاده

یک وبسایت فروشگاه آنلاین را در نظر بگیرید که در آن موجودیت های مختلفی مانند کاربر، محصول، سفارش و ... غیره وجود دارد. برخی عملیات بین این موجودیت ها مشترک می باشند. برای مثال برای همه موجودیت ها باید عملیات save, edit  و delete پیاده سازی شود. اگر بجای استفاده از interface تصمیم بگیرید متدهای ذکر شده را در هر کلاس به شکل جداگانه تعریف کنیم، در اثر توسعه برنامه دو مشکل عمده ممکن است بوجود آید:

  1. نام متدها در هر کلاس ممکن است متفاوت تعریف گردد، مثلا در کلاس سفارش نام متد edit و در کلاس محصول نام آن update در نظر گرفته شود که این مشکل در پروژه های Team work به وفور پیش خواهد آمد!
  2. ممکن است پیاده سازی برخی متدها در کلاس ها فراموش شود که همین امر موجب بروز خطا شده و مدت زمان زیادی را باید به پیدا کردن و رفع آن بپردازید. شاید این موضوع در نگاه اول مضحک به نظر برسد که چطور ممکن است پیاده سازی سه متد ساده فراموش شود اما به شما این اطمینان را میدهم در پروژه های متوسط و بزرگ به قدری تعداد کلاس ها و متدها افزایش می یابد که اگر این اصول را رعایت نکنید ساخت، تکمیل و توسعه پروژه به کابوس وحشتناکی تبدیل خواهد شد.

برای افزودن interface به پروژه، رو نام پروژه در پنجره solution explorer کلیک راست کرده و از منوی Add گزینه New Item را انتخاب کنید.

interface در سی شارپ

از لیست نمایش داده شده گزینه Interface را انتخاب کرده و در کادر Name یک نام برای آن تعیین کنید. نام interfaceها می بایست با I شروع شود که در این مثال IAction در نظر گرفته شده است. پس از تعیین نام روی دکمه Add کلیک کنید تا interface مورد نظر به پروژه اضافه شود.

پس از افزوده شدن interface به پروژه می توانید متدهای مورد نظر را درون آن تعریف کنید، در این مثال قصد داریم سه متد برای ذخیره سازی، ویرایش و حذف ایجاد کنیم.

interface IAction
{
    void Save();
    void Edit();
    void Delete(int id);
}

توجه داشته باشید که در interface تنها ساختار متد مشخص می شود و هیچگونه کدی درون آنها تعریف نمی شود. در ادامه کلاسی به نام Product به پروژه اضافه کنید که از این interface ارث بری داشته باشد.

class Product:IAction
{

}

حال اگر اقدام به اجرای برنامه کنید با خطای زیر مواجه خواهید شد:

خطای عدم پیاده سازی interface

همانطور که از متن خطا مشخص است، کلاس Product از IAction ارث بری کرده اما متدهای آن را پیاده سازی نکرده است بنابراین می بایست متدهای مربوطه با همان ساختاری که در interface مشخص شده است، پیاده سازی شوند.

class Product:IAction
{
    public void Save()
    {

    }
    public void Edit()
    {

    }
    public void Delete(int id)
    {

    }
}

پس از پیاده سازی متدها مشاهده خواهید نمود که برنامه بدون مشکل اجرا خواهد شد. یکی دیگر از مزیت های بسیار مهم interfaceها آن است که یک کلاس می تواند از بیش از یک interface ارث بری داشته باشد.

class Student:IPerson,IAction
{
    
}