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

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

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

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

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

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

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


  1. Множествено наследяване - Един клас може да използва само един абстрактен клас, следователно множественото наследяване не се поддържа. Интерфейсът, от друга страна, може да поддържа множество наследявания, което означава, че клас може да наследи произволен брой наследства.
    Определение на абстрактния клас и интерфейс в C # - Абстрактният клас е специален тип клас, който може да съдържа дефиниция без реализация. Логиката на изпълнение се предоставя от извлечените от нея класове. Тя може да има абстрактни, както и нео-абстрактни методи. Интерфейсът, от друга страна, е просто модел, който не може да направи нищо. Технически това е просто празна черупка.
    Изпълнение - Абстрактен клас може да съдържа както дефиниция, така и нейната реализация. Това е незавършен клас, който не може да бъде инстанциран. Интерфейсът може да има само подписа на функционалността без никакъв код.
    Модификатори на достъпа - Абстрактен клас може да има няколко модификатори на достъп като подразделения, функции, свойства и т.н., докато интерфейсът не е позволен да има модификатори на достъп и всички методи трябва да бъдат дефинирани по подразбиране като публични.
    Хомогенност - абстрактен клас се използва за реализации от същия тип, поведение и състояние, докато интерфейс се използва за реализации, които споделят само подписи на метод.
    Декларация - Абстрактният клас действа като базов клас за всички останали класове, така че може да декларира или използва всяка променлива, докато интерфейсът не е позволен да декларира променливи.
    Декларация на конструктора - Докато абстрактен клас може да има конструкторска декларация, интерфейсът не може да има декларация на конструктор.
    Core vs. Peripheral - Абстрактен клас се използва за дефиниране на основната идентичност на клас и може да се използва за обекти от същия тип данни. От друга страна се използва интерфейс за определяне на периферните способности на клас.
    Rigid vs. Supple - Абстрактният клас е по-гъвкав по отношение на функционалността, поне от гледна точка на разработчика, докато интерфейсът е по-твърд.

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

резюме

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

Препратки

  • Свобода, Джеси. Учене C #. Себастопол: O’Reilly Media, 2002. Печат
  • Свобода, Джеси. Учене C #. Себастопол: O’Reilly Media, 2002. Печат
  • Лавин, Питър. Обектно-ориентиран PHP: Концепции, техники и код. Сан Франциско: No Starch Press, 2006. Печат
  • Стелман, Андрю и Дженифър Грийн. Глава първа C #. Kolkata: Shroff Publisers & Distributors, 2008. Печат
  • „Кредитна снимка: https://stackoverflow.com/questions/2570814/when-to-use-abrief-classes“