یک کلاس انتزاعی بسیار شبیه به یک رابط است ، اما این مفهوم برای مبتدیان OOP کمی گیج کننده است. از نظر مفهومی ، یک کلاس انتزاعی دقیقاً مانند یک رابط به نظر می رسد ، بدون هیچ گونه اجرا ، با این حال آنها سهم نسبتاً خوبی از تفاوت ها دارند. در حالی که یک کلاس انتزاعی می تواند به صورت جزئی یا کاملاً پیاده سازی شود ، یک رابط کاملاً باید پیاده سازی شود. خوب ، قابل توجه ترین تفاوت بین این دو این است که یک کلاس انتزاعی می تواند اجرای پیش فرض داشته باشد ، در حالی که یک رابط فقط تعریف روش هایی است که فقط شامل اعلامیه های اعضا می باشد. بیایید به تفصیل در مورد جنبه های نظری هر دو بحث کنیم.

کلاس انتزاعی چیست؟

کلاس انتزاعی نوع خاصی از کلاس است که به عنوان پایه سایر کلاسها عمل می کند و نمی توان آنرا فوراً کرد. منطق اجرای یک کلاس انتزاعی توسط کلاسهای مشتق شده آن تهیه شده است. برای ایجاد یک کلاس انتزاعی ، از اصلاحگر "انتزاعی" استفاده می شود که به معنای اجرای برخی از دست رفته ها در کلاس مشتق شده از آن است. این شامل اعضای انتزاعی و غیر انتزاعی است. یک کلاس انتزاعی برای ارائه قابلیت های اساسی در نظر گرفته شده است که می تواند توسط کلاسهای مشتق شده چندگانه به اشتراک گذاشته شود. برای جلوگیری از هر نوع تکراری کد مفید است. آنها بسیار شبیه به رابط ها اما با قابلیت های اضافی هستند.

تفاوت کلاس چکیده و رابط در C #

رابط چیست؟

از طرف دیگر ، رابط کلاس نیست که فقط امضای عملکرد را شامل شود. این الگویی است بدون اجرای. از نظر مفهومی ، این فقط تعریف روش هایی است که فقط شامل اعضا می شود. این یک پوسته خالی است که شامل اجرای اعضای آن نمی باشد. این مانند یک کلاس پایه انتزاعی است که فقط شامل اعضای انتزاعی مانند روش ها ، رویدادها ، ایندکس ها ، خصوصیات و غیره است. نمی توان آنرا بطور مستقیم فوری کرد و اعضای آن توسط هر کلاس قابل اجرا هستند. علاوه بر این ، رابط های چندگانه توسط یک کلاس قابل اجرا هستند ، با این حال ، یک کلاس فقط می تواند یک کلاس واحد را به ارث ببرد.

کلاس کلاس در مقابل رابط: تفاوت کلاس چکیده و رابط در C #


  1. وراثت چندگانه - یک کلاس فقط می تواند از یک کلاس انتزاعی استفاده کند ، از این رو میراث چندگانه پشتیبانی نمی شود. از طرف دیگر یک رابط می تواند از وراثت چندگانه پشتیبانی کند ، به این معنی که یک کلاس می تواند هر تعداد وراث را به ارث ببرد.
    تعریف کلاس چکیده و رابط در C # - کلاس انتزاعی نوع خاصی از کلاس است که ممکن است حاوی تعریف و بدون اجرای باشد. منطق اجرای توسط کلاسهای مشتق شده آن تهیه شده است. این روش می تواند دارای روشهای انتزاعی و غیر انتزاعی باشد. از طرف دیگر رابط فقط الگویی است که نمی تواند کاری انجام دهد. از نظر فنی ، این فقط یک پوسته خالی است.
    پیاده سازی - یک کلاس انتزاعی می تواند شامل تعریف و اجرای آن باشد. این یک کلاس ناقص است که نمی تواند از طریق آن سریعاً مورد استفاده قرار گیرد. یک رابط فقط می تواند امضاء عملکرد بدون هیچ کد باشد.
    Access Modifiers - یک کلاس انتزاعی می تواند چندین تعدیل کننده دسترسی مانند زیر مجموعه ، توابع ، ویژگی ها و غیره داشته باشد ، در حالی که یک رابط مجاز به اصلاح کننده های دسترسی نیست و همه روش ها باید به طور ضمنی به عنوان عمومی تعریف شوند.
    همگنی - کلاس انتزاعی برای پیاده سازی از همان نوع ، رفتار و وضعیت استفاده می شود ، در حالی که یک رابط برای پیاده سازی هایی استفاده می شود که فقط امضاهای متد را به اشتراک می گذارند.
    اعلامیه - یک کلاس انتزاعی به عنوان یک کلاس پایه برای همه کلاس های دیگر عمل می کند ، بنابراین می تواند هر متغیر را اعلام کند یا از آن استفاده کند در حالی که یک رابط مجاز به اعلام هیچ متغیر نیست.
    اعلامیه سازنده - در حالی که یک کلاس انتزاعی می تواند دارای اعلامیه سازنده باشد ، یک رابط نمی تواند دارای اظهارنامه سازنده باشد.
    هسته در مقابل محیطی - یک کلاس انتزاعی برای تعریف هویت اصلی یک کلاس استفاده می شود و می تواند برای اشیاء از همان نوع داده استفاده شود. از طرف دیگر یک رابط برای تعریف توانایی محیطی یک کلاس استفاده می شود.
    Rigid vs Supple - یک کلاس انتزاعی حداقل از منظر یک توسعه دهنده از لحاظ کارآیی ، ماهرانه تر است ، در حالی که یک رابط سفت و سخت تر است.

کلاس خلاصه در مقابل رابط: فرم جدول

خلاصه

تفاوت بین یک کلاس انتزاعی و یک رابط چیست؟ این احتمالاً یکی از متداول ترین سؤالات در هر مصاحبه فنی است. به احتمال زیاد شما در هر آموزش C # مجموعه ای از اطلاعات در مورد کلاس های انتزاعی و رابط ها را پیدا خواهید کرد ، با این حال ، درک تفاوت بین این دو کاملاً دشوار است. شما می توانید تمام اطلاعاتی را که می توانید پیدا کنید ادغام کنید و هنوز هم نمی توانید به اندازه کافی دریافت کنید. خوب ، از نظر مفهومی هر دو مهمترین اصطلاحات برنامه نویسی هستند و کاملاً یکسان هستند ، با این حال از نظر عملکرد تفاوت زیادی دارند. در حالی که کلاس انتزاعی نوع خاصی از کلاس است که به عنوان پایه ای برای کلاسهای دیگر عمل می کند ، از طرف دیگر رابط فقط پوسته ای خالی است که تنها اعلامیه های اعضا را دارد.

منابع

  • آزادی ، جسی. یادگیری سی شارپ. سباستوپول: O'Reilly Media ، 2002. چاپ
  • آزادی ، جسی. یادگیری سی شارپ. سباستوپول: O'Reilly Media ، 2002. چاپ
  • لاوین ، پیتر PHP شی گرا: مفاهیم ، تکنیک ها و کد. سان فرانسیسکو: انتشار نشاسته ، 2006. چاپ
  • استلمن ، اندرو و جنیفر گرین. سر اول C #. Kolkata: ناشران و توزیع کنندگان Shroff ، 2008. چاپ
  • "اعتبار تصویر: https://stackoverflow.com/questions/2570814/when-to-use-ab Abstract-classes"