Абстрактны клас шмат у чым падобны на інтэрфейс, але гэтая канцэпцыя крыху заблытаная для пачаткоўцаў OOP. Канцэптуальна абстрактны клас выглядае як інтэрфейс, вядома, без укаранення, аднак у іх ёсць доля адрозненняў. Хоць абстрактны клас можа быць часткова або цалкам рэалізаваны, інтэрфейс павінен быць цалкам рэалізаваны. Ну, самая заўважная розніца паміж імі - тое, што абстрактны клас можа мець рэалізацыю па змаўчанні, а інтэрфейс - гэта толькі вызначэнне метадаў, якія ўтрымліваюць толькі дэкларацыі ўдзельнікаў. Давайце падрабязна абмяркуем тэарэтычныя аспекты.

Што такое абстрактны клас?

Абстрактны клас - гэта асаблівы тып класа, які дзейнічае як аснова іншых класаў, і яго немагчыма стварыць. Логіка рэалізацыі абстрактнага класа забяспечваецца яго вытворнымі класамі. Каб зрабіць клас абстрактным, выкарыстоўваецца "абстрактны" мадыфікатар, які азначае, што ў класе, атрыманым з яго, неабходна рэалізаваць нейкую адсутнічае рэалізацыю. У ёй увайшлі як абстрактныя, так і неабразіўныя члены. Абстрактны клас прызначаны для забеспячэння асноўнай функцыянальнасці, якую можна далей падзяляць і пераадольваць некалькімі вытворнымі класамі. Карысна пазбягаць дублявання кода. Яны вельмі падобныя на інтэрфейсы, але з дадатковай функцыянальнасцю.

Розніца паміж абстрактным класам і інтэрфейсам у C #

Што такое інтэрфейс?

Інтэрфейс, з іншага боку, не з'яўляецца класам, які змяшчае толькі функцыянальную подпіс. Гэта шаблон без рэалізацыі. Канцэптуальна кажучы, гэта проста вызначэнне метадаў, якое ўтрымлівае толькі дэкларацыю членаў. Гэта пустая абалонка, якая не ўтрымлівае рэалізацыі сваіх членаў. Ён падобны на абстрактны базавы клас, які змяшчае толькі абстрактныя члены, такія як метады, падзеі, індэксары, уласцівасці і г.д. Акрамя таго, клас можа быць рэалізаваны некалькімі інтэрфейсамі, аднак клас можа ўспадкаваць толькі адзін клас.

Абстрактны клас супраць інтэрфейсу: розніца паміж абстрактным класам і інтэрфейсам у C #


  1. Шматразовае спадчыннасць - клас можа выкарыстоўваць толькі адзін абстрактны клас, таму множнае ўспадкаванне не падтрымліваецца. Інтэрфейс, з іншага боку, можа падтрымліваць некалькі ўспадкоўванняў, што азначае, што клас можа ўспадкаваць любыя колькасці спадчын.
    Вызначэнне абстрактнага класа і інтэрфейсу ў C # - абстрактны клас - гэта асаблівы тып класа, які можа ўтрымліваць вызначэнне без рэалізацыі. Логіка рэалізацыі забяспечваецца атрыманымі класамі. Ён можа мець як абстрактныя, так і неастрактыўныя метады. Інтэрфейс з іншага боку - гэта толькі ўзор, які нічога не можа зрабіць. Тэхнічна гэта проста пустая абалонка.
    Рэалізацыя - абстрактны клас можа ўтрымліваць як вызначэнне, так і яго рэалізацыю. Гэта няпоўны клас, які немагчыма стварыць. Інтэрфейс можа мець подпіс функцыянальнасці толькі без кода.
    Мадыфікатары доступу - абстрактны клас можа мець некалькі мадыфікатараў доступу, такіх як падраздзяленні, функцыі, уласцівасці і г.д.
    Аднастайнасць - абстрактны клас выкарыстоўваецца для рэалізацыі таго ж тыпу, паводзін і статусу, у той час як інтэрфейс выкарыстоўваецца для рэалізацый, якія падзяляюць толькі подпісы метадаў.
    Дэкларацыя - абстрактны клас дзейнічае як базавы клас для ўсіх астатніх класаў, таму ён можа аб'яўляць альбо выкарыстоўваць любую зменную, у той час як інтэрфейс не мае магчымасці аб'яўляць зменныя.
    Дэкларацыя канструктара - Хоць абстрактны клас можа мець аб'яву канструктара, у інтэрфейсе не можа быць аб'явы канструктара.
    Core vs. Peripheral - абстрактны клас выкарыстоўваецца для вызначэння асноўнай ідэнтычнасці класа і можа выкарыстоўвацца для аб'ектаў таго ж тыпу дадзеных. З іншага боку, інтэрфейс выкарыстоўваецца для вызначэння перыферыйнай здольнасці класа.
    Rigid vs. Supple - абстрактны клас больш гнуткі ў плане функцыянальнасці, прынамсі, з пункту гледжання распрацоўніка, у той час як інтэрфейс больш жорсткі.

Анатацыя класа супраць інтэрфейсу: форма табліцы

Рэзюмэ

У чым розніца паміж абстрактным класам і інтэрфейсам? Верагодна, гэта адно з самых распаўсюджаных пытанняў у любым тэхнічным інтэрв'ю. Вы, верагодна, знойдзеце мноства інфармацыі пра абстрактныя класы і інтэрфейсы ў любым навучальным дапаможніку C #, аднак разуменне розніцы паміж імі даволі жорсткая. Вы можаце кансалідаваць усю інфармацыю, якую вы можаце знайсці, і ўсё яшчэ не можаце яе атрымаць. Што ж, канцэптуальна абодва з'яўляюцца найбольш важнымі ў праграмаванні і цалкам супадаюць, аднак у функцыянальнасці яны моцна адрозніваюцца. Хоць абстрактны клас - гэта асаблівы тып класа, які служыць базай для іншых класаў, інтэрфейс, з іншага боку, з'яўляецца проста пустой абалонкай з толькі дэкларацыямі членаў.

Літаратура

  • Свабода, Джэсі. Навучанне C #. Севастопаль: O’Reilly Media, 2002. Друк
  • Свабода, Джэсі. Навучанне C #. Севастопаль: O’Reilly Media, 2002. Друк
  • Лавін, Пётр. Аб'ектна-арыентаваны PHP: паняцці, метады і кодэкс. Сан-Францыска: Няма крухмальнай прэсы, 2006. Друк
  • Стэлман, Эндру і Джэніфер Грын. Кіраўнік першы C #. Калькута: Shroff Publisers & Distributors, 2008. Друк
  • "Крэдыт малюнкаў: https://stackoverflow.com/questions/2570814/when-to-use-ab абстракт-classes"