Razlika između sažetaka klase i sučelja u C #

Apstraktna klasa uvelike liči na sučelje, ali koncept je pomalo zbunjujući za početnike OOP-a. Koncepcijski, apstraktna klasa izgleda poput sučelja, naravno, bez ikakve primjene, međutim oni imaju svoj udio razlika. Iako apstraktna klasa može biti djelomično ili u potpunosti implementirana, sučelje se mora u potpunosti implementirati. Pa, najistaknutija razlika između ove dvije je da apstraktna klasa može imati zadanu implementaciju, dok sučelje je samo definicija metoda koja sadrži samo članske deklaracije. Raspravimo u detalje o teorijskim aspektima oba.

Što je apstraktna klasa?

Apstraktna klasa je posebna vrsta klase koja djeluje kao osnova drugih klasa i ne može se instancirati. Logika implementacije apstraktne klase osigurana je izvedenim klasama. Da bi se klasa napravila apstraktno, koristi se "apstraktni" modifikator, što znači da neka nedostajuća implementacija treba biti implementirana u klasu izvedenu iz nje. Sadrži i apstraktne i ne-apstraktne članove. Apstraktna klasa namijenjena je pružanju osnovne funkcionalnosti koja se može dijeliti i nadjačati više izvedenih klasa. Korisno je izbjeći bilo kakvo dupliciranje koda. Izgledaju poput sučelja, ali s dodatnom funkcionalnošću.

Što je sučelje?

S druge strane, sučelje nije klasa koja sadrži samo potpis funkcionalnosti. To je obrazac bez implementacije. Koncepcijski gledano, to je samo definicija metoda koja sadrži samo deklaraciju članova. To je prazna ljuska koja ne sadrži implementaciju svojih članova. To je poput apstraktne osnovne klase koja sadrži samo apstraktne članove kao što su metode, događaji, indektori, svojstva itd. Ne može ih se izravno primijeniti, a bilo koje članove može implementirati bilo koja klasa. Uz to, klasa može implementirati više sučelja, međutim, klasa može naslijediti samo jednu klasu.

Sažetak klase prema sučelju: razlika između apstraktnog razreda i sučelja u C #

  1. Višestruko nasljeđivanje - Razred može koristiti samo jednu apstraktnu klasu, stoga višestruko nasljeđivanje nije podržano. Sučelje, s druge strane, može podržati više nasljeđivanja, što znači da klasa može naslijediti bilo koji broj nasljeđivanja.
  2. definicija  od Sažetak klase i sučelja u C #- Sažetak klase je posebna vrsta klase koja može sadržavati definiciju bez ikakve implementacije. Logika provedbe osigurana je iz njenih izvedenih klasa. Može imati apstraktne i ne-apstraktne metode. S druge strane, sučelje je samo obrazac koji ništa ne može učiniti. Tehnički gledano, to je samo prazna školjka.
  3. izvršenje - Apstraktna klasa može sadržavati i definiciju i njezinu provedbu. To je nepotpuna klasa koja se ne može postojati. Sučelje može imati samo potpis funkcionalnosti bez ikakvog koda.
  4.  Pristupite modifikatorima - Apstraktna klasa može imati nekoliko modifikatora pristupa, kao što su sub, funkcije, svojstva itd., Dok sučelje ne smije imati modifikatore pristupa i sve metode moraju se implicitno definirati kao javne.
  5. Homogenost - Apstraktna klasa koristi se za implementacije iste vrste, ponašanja i statusa, dok se sučelje koristi za implementacije koje dijele samo potpise metoda.
  6. Deklaracija - Apstraktna klasa djeluje kao osnovna klasa za sve ostale klase tako da može deklarirati ili koristiti bilo koju varijablu, dok sučelje nije dopušteno deklarirati nikakve varijable.
  7. Izjava konstruktora - Iako apstraktna klasa može imati deklaraciju konstruktora, sučelje ne može imati deklaraciju konstruktora.
  8. Jezgra protiv perifernih - Apstraktna klasa koristi se za definiranje jezgre klase i može se koristiti za objekte iste vrste podataka. S druge strane, sučelje se koristi za definiranje periferne sposobnosti klase.
  9. Kruta nasuprot - Apstraktna klasa je fleksibilnija u pogledu funkcionalnosti, barem iz perspektive programera, dok je sučelje kruto.

Sažetak razreda prema sučelju: Oblik tablice

Sažetak klase

Sučelje

Apstraktna klasa može imati sve modifikatore pristupa za deklariranje članova o funkcijama, podsvojbama i svojstvima. Sučelje nije dopušteno da ima modifikatore pristupa za deklariranje članova o funkcijama, podsklopima, svojstvima itd. Svi članovi se pretpostavljaju da su implicitno javni.
Razreda može koristiti najviše jednu apstraktnu klasu. Klasa može naslijediti bilo koji broj sučelja.
Višestruko nasljeđivanje nije podržano u apstraktnoj klasi. Sučelje može podržati više nasljeđivanja.
Tehnički je to klasa koja može ili ne mora sadržavati i definiciju i njezinu implementaciju. Sučelje može imati samo potpis funkcionalnosti, tako da je u osnovi prazna ljuska.
Sažetak klase može sadržavati članove. consts, definirane metode i dijelovi metoda. Sučelje može sadržavati samo metode i consts.
Ona definira temeljni identitet klase i koristi se za opisivanje objekata iste vrste podataka. Koristi se za opisivanje perifernih sposobnosti klase.
Članovi apstraktne klase ne mogu biti statični ako nije potpuni član. Članovi sučelja ne mogu biti statični.
Idealan je za implementacije iste vrste i uobičajena ponašanja. Sučelja je bolje koristiti ako nekoliko implementacija dijeli samo potpise metoda.
Može imati konstrukciju deklaracije. Ne može imati konstrukcijsku deklaraciju.
Apstraktna klasa ima unaprijed definirana polja i ograničenja. Polja se ne mogu definirati u sučeljima.
Može imati i apstraktne i ne-apstraktne metode. Može imati samo apstraktne metode.

Sažetak

Koja je razlika između apstraktne klase i sučelja? Ovo je vjerojatno jedno od najčešćih pitanja postavljenih u bilo kojem tehničkom razgovoru. Vjerojatno ćete naći mnoštvo informacija o apstraktnim klasama i sučeljima u bilo kojem C # udžbeniku, međutim, razumijevanje razlike između njih dva prilično je težak dio. Možete objediniti sve informacije koje možete pronaći i još uvijek ne mogu dobiti dovoljno. Pa, konceptualno su oba najvažnija izraza u programiranju i sasvim su ista, međutim, znatno se razlikuju u pogledu funkcionalnosti. Iako je apstraktna klasa posebna vrsta klase koja djeluje kao osnova za ostale klase, sučelje je, s druge strane, samo prazna ljuska sa samo članskim deklaracijama.