Разлика между абстрактния клас и интерфейса в C #

Абстрактният клас прилича много на интерфейс, но концепцията е малко объркваща за начинаещите на OOP. В концептуален план абстрактният клас изглежда точно като интерфейс, разбира се, без никакво внедряване, но те имат своя справедлив дял от различията. Докато абстрактният клас може да бъде частично или изцяло реализиран, интерфейсът трябва да бъде реализиран изцяло. Е, най-забележимата разлика между двете е, че един абстрактен клас може да има изпълнение по подразбиране, докато интерфейс е само дефинирането на методите, които съдържат само декларациите на членовете. Нека обсъдим подробно теоретичните аспекти и на двете.

Какво е абстрактен клас?

Абстрактният клас е специален тип клас, който действа като основа на други класове и не може да бъде създаден. Логиката на изпълнение на абстрактен клас се осигурява от неговите производни класове. За да се направи абстрактен клас, се използва "абстрактният" модификатор, което означава, че някои липсващи имплементи трябва да бъдат реализирани в класа, получен от него. Съдържа както абстрактни, така и не абстрактни членове. Абстрактният клас има за цел да осигури основна функционалност, която може да бъде споделена и надменяна от множество производни класове. Полезно е да се избегне всякакъв вид дублиране на код. Те приличат много на интерфейси, но с добавена функционалност.

Какво е интерфейс?

Интерфейсът, от друга страна, не е клас, който съдържа само подписа на функционалността. Това е модел без прилагане. Концептуално казано, това е само определението на методите, което съдържа само декларацията на членовете. Това е празна обвивка, която не съдържа изпълнението на своите членове. Това е като абстрактен базов клас, който съдържа само абстрактни членове като методи, събития, индекси, свойства и т.н. Той не може да бъде създаден директно и неговите членове могат да бъдат реализирани от всеки клас. Освен това от клас могат да бъдат реализирани множество интерфейси, но клас може да наследи само един клас.

Абстрактен клас срещу интерфейс: разлика между абстрактния клас и интерфейс в C #

  1. Множество наследяване - Класът може да използва само един абстрактен клас, следователно множественото наследяване не се поддържа. Интерфейсът, от друга страна, може да поддържа множество наследявания, което означава, че клас може да наследи произволен брой наследства.
  2. дефиниция  на Абстрактен клас и интерфейс в C #- Абстрактният клас е специален тип клас, който може да съдържа дефиниция без реализация. Логиката на изпълнение се осигурява от извлечените от нея класове. Тя може да има абстрактни, както и нео-абстрактни методи. Интерфейсът, от друга страна, е просто модел, който не може да направи нищо. Технически това е просто празна черупка.
  3. изпълнение - Абстрактен клас може да съдържа както дефиниция, така и нейната реализация. Това е незавършен клас, който не може да бъде инстанциран. Интерфейсът може да има само подписа на функционалността без никакъв код.
  4.  Модификатори за достъп - Абстрактен клас може да има няколко модификатори на достъп като подразделения, функции, свойства и т.н., докато интерфейсът не е разрешен да има модификатори на достъп и всички методи трябва да бъдат дефинирани неявно като обществени.
  5. хомогенност - Абстрактен клас се използва за реализации от същия тип, поведение и състояние, докато интерфейс се използва за реализации, които споделят само подписи на метод.
  6. декларация - Абстрактен клас действа като базов клас за всички останали класове, така че може да декларира или използва всяка променлива, докато интерфейсът не е позволен да декларира променливи.
  7. Декларация на конструктора - Докато абстрактният клас може да има конструкторска декларация, интерфейсът не може да има конструкторна декларация.
  8. Основни срещу периферни - Абстрактен клас се използва за дефиниране на основната идентичност на клас и може да се използва за обекти от същия тип данни. От друга страна, интерфейс се използва за определяне на периферната способност на клас.
  9. Rigid срещу Supple - Абстрактният клас е по-гъвкав по отношение на функционалността, поне от гледна точка на разработчика, докато интерфейсът е по-твърд.

Абстрактен клас срещу интерфейс: Форма на таблицата

Абстрактен клас

интерфейс

Абстрактен клас може да има всички модификатори на достъп за деклариране на членове за функции, подразделения и свойства. Не е позволено даден интерфейс да има модификатори на достъп за деклариране на функции, подс., Свойства и т.н. Всички членове се приемат като неявно обществени.
Един клас може да използва най-много само един абстрактен клас. Класът може да наследи произволен брой интерфейси.
Множественото наследяване не се поддържа в абстрактен клас. Интерфейсът може да поддържа множество наследявания.
Технически това е клас, който може или не може да съдържа както дефиниция, така и нейната реализация. Интерфейсът може да има само подпис на функционалност, така че всъщност това е празен корпус.
Абстрактният клас може да съдържа членове. consts, дефинирани методи и мъничета на методите. Интерфейсът може да съдържа само методи и consts.
Той дефинира основната идентичност на клас и се използва за описание на обекти от същия тип данни. Използва се за описание на периферните способности на даден клас.
Членовете на абстрактен клас не могат да бъдат статични, освен ако не са пълни членове. Членовете на даден интерфейс не могат да бъдат статични.
Той е идеален за реализации от същия вид и общо поведение. По-добре е да използвате интерфейси, ако няколко реализации споделят само подписи на метод.
Може да има конструкторска декларация. Не може да има конструкторска декларация.
Абстрактният клас има предварително дефинирани полета и ограничения. Полетата не могат да бъдат дефинирани в интерфейсите.
Той може да има както абстрактни, така и нео-абстрактни методи. Може да има само абстрактни методи.

резюме

Каква е разликата между абстрактен клас и интерфейс? Това вероятно е един от най-често срещаните въпроси, зададени във всяко техническо интервю. Вероятно ще намерите множество информация за абстрактни класове и интерфейси във всеки C # урок, обаче, разбирането на разликата между двете е доста трудната част. Можете да консолидирате цялата информация, която можете да намерите и все още не можете да получите достатъчно. Е, концептуално и двете са най-важните термини в програмирането и са доста еднакви, обаче се различават много по отношение на функционалността. Докато абстрактният клас е специален тип клас, който действа като база за други класове, интерфейсът, от друга страна, е просто празна обвивка само с декларации на членове.