Abstrakti luokka ja liitäntä C #

Anonim

Abstrakti luokka näyttää paljon käyttöliittymältä, mutta käsite on vähän sekava OOP: n aloittelijoille. Käsitteellisesti, abstrakti luokka näyttää aivan kuten käyttöliittymä, tietenkin, ilman mitään täytäntöönpanoa, mutta heillä on heidän oikeudenmukainen osuus eroista. Vaikka abstrakti luokka voidaan joko osittain tai kokonaan toteuttaa, käyttöliittymä on toteutettava kokonaan. Hyvin tärkein ero näiden kahden välillä on, että abstraktilla luokalla voi olla oletusarvoinen toteutus, kun taas rajapinta on vain sellaisten menetelmien määritelmä, jotka sisältävät vain jäsenilmoituksia. Keskustellaan molempien yksityiskohtaisista teoreettisista näkökohdista.

Mikä on abstrakti luokka?

Abstrakti luokka on erityinen luokan tyyppi, joka toimii muiden luokkien pohjana ja jota ei voida instantiated. Abstraktin luokan toteutuslogiikka saadaan sen johdetuista luokista. Luokan abstraktin tekemiseksi käytetään "abstrakti" -muokkaajaa, mikä tarkoittaa, että puuttuva toteutus on toteutettava luokasta, joka on johdettu siitä. Se sisältää sekä abstrakteja että ei-abstrakteja jäseniä. Abstraktin luokan tarkoituksena on tarjota perustoimintoja, joita voidaan edelleen jakaa ja ohittaa useita johdettuja luokkia. On hyödyllistä välttää kaikenlaista koodin päällekkäisyyttä. Ne näyttävät erittäin paljon käyttöliittymiltä, ​​mutta lisätoiminnoilla.

Mikä on käyttöliittymä?

Rajapinta ei kuitenkaan ole luokka, joka sisältää vain toiminnallisuuden allekirjoituksen. Se on malli ilman toteutusta. Käsitteellisesti, se on vain määritelmä menetelmiä, jotka sisältävät vain jäsenten ilmoituksen. Se on tyhjä kuori, joka ei sisällä sen jäsenten toteutusta. Se on kuin abstrakti perusluokka, joka sisältää vain abstrakteja jäseniä, kuten menetelmiä, tapahtumia, indeksoijia, ominaisuuksia jne. Se ei voi instantiota suoraan ja sen jäseniä voidaan toteuttaa millä tahansa luokalla. Lisäksi luokan avulla voidaan toteuttaa useita rajapintoja, mutta luokka voi periä vain yhden luokan.

Abstrakti luokka vs. käyttöliittymä: ero abstraktin luokan ja käyttöliittymän välillä C #

  1. Moninkertainen perintö - Luokka voi käyttää vain yhtä abstraktia luokkaa, joten moninkertaista perintöä ei tueta. Rajapinta voi toisaalta tukea useaa perintöä, mikä tarkoittaa, että luokka voi periä minkä tahansa määrän perintöjä.
  2. Määritelmä of Abstrakti luokka ja liitäntä C #- abstrakti luokka on erityinen luokan tyyppi, joka voi sisältää määritelmää ilman toteutusta. Toteutuslogiikka saadaan sen johdetuista luokista. Se voi olla abstrakteja sekä ei-abstrakteja menetelmiä. Rajapinta on toisaalta vain malli, joka ei voi tehdä mitään. Teknisesti se on vain tyhjä kuori.
  3. täytäntöönpano - Abstraktilla luokalla voi olla sekä määritelmä että sen toteutus. Se on epätäydellinen luokka, jota ei voida instantiated. Rajapinnalla voi olla vain toimintojen allekirjoitus ilman koodia.
  4. Access Modifiers - Abstraktilla luokalla voi olla useita käyttömodifikaattoreita, kuten subs, funktioita, ominaisuuksia jne., Kun taas rajapinnalla ei ole pääsyä muokkaajille ja kaikki menetelmät on implicitisesti määriteltävä julkisina.
  5. homogeenisuus - Saman tyyppisiä, käyttäytyviä ja tilastoja käyttäviä abstrakteja luokkia käytetään, kun taas käyttöliittymää käytetään sellaisissa toteutuksissa, joissa on vain menetelmän allekirjoituksia.
  6. ilmoitus - Abstraktilla luokalla toimii perusluokka kaikille muille luokille, jotta se voi julistaa tai käyttää mitä tahansa muuttujaa, kun käyttöliittymän ei sallita ilmoittaa muuttujia.
  7. Rakentajan julistus - Vaikka abstraktilla luokalla voi olla rakentajailmoitus, rajapinnalla ei voi olla rakentajan ilmoitusta.
  8. Core vs. Peripheral - Luokan ydinidentiteettiä määritellään abstraktilla luokalla, jota voidaan käyttää saman datatyypin kohteisiin. Toisaalta käyttöliittymää käytetään määrittelemään luokan reuna-kyky.
  9. Rigid vs. supple - Abstrakti luokka on joustavampi toiminnallisuuden kannalta, ainakin kehittäjän näkökulmasta, kun taas käyttöliittymä on jäykkä.

Abstrakti luokka vs. liitäntä: Taulukko

Abstrakti luokka

liitäntä

Abstraktilla luokalla voi olla kaikki käyttömodifikaattorit jäsenten toimintojen, subs, ja ominaisuuksien ilmoittamiselle. Rajapinnalla ei ole käyttöoikeusmodifikaattoreita jäsenille, jotka ilmoittavat toiminnot, subs, properties, etc. Kaikki jäsenet oletetaan implisiittisesti julkisiksi.
Luokka voi useimmiten käyttää vain yhtä abstraktia luokkaa. Luokka voi periä minkä tahansa rajapinnan määrän.
Moninkertaista perintöä ei tueta abstraktilla luokalla. Käyttöliittymä voi tukea useita perintöjä.
Teknisesti se on luokka, joka voi sisältää tai ei voi sisältää sekä määritelmää että sen toteutusta. Rajapinnalla voi olla vain toimintojen allekirjoitus, joten se on pohjimmiltaan tyhjä kuori.
Abstraktilla luokalla voi olla jäseniä. consts, määritellyt menetelmät ja metodiostokset. Käyttöliittymä voi sisältää vain menetelmiä ja rajoituksia.
Se määrittää luokan ydinidentiteetin ja sitä käytetään kuvaamaan saman datatyypin esineitä. Sitä käytetään kuvaamaan luokan reunaarvoja.
Abstraktin luokan jäsenet eivät voi olla staattisia, ellei kyseessä ole täydellinen jäsen. Liittymän jäsenet eivät voi olla staattisia.
Se on ihanteellinen samanlaisten ja tavanomaisten käyttäytymistä varten. On parempi käyttää rajapintoja, jos useat toteutukset jakavat vain menetelmän allekirjoitukset.
Se voi olla rakentajan ilmoitus. Se ei voi olla rakentajan ilmoitus.
Abstraktilla luokalla on ennalta määritetyt kentät ja rajat. Käyttöliittymissä ei voi määrittää kenttiä.
Siinä voi olla sekä abstrakteja että ei-abstrakteja menetelmiä. Se voi olla vain abstrakteja menetelmiä.

Yhteenveto

Mikä on ero abstraktin luokan ja käyttöliittymän välillä? Tämä on luultavasti yksi yleisimmistä kysymyksistä, joita on pyydetty kaikissa teknisissä haastatteluissa. Olet todennäköisesti löytänyt lukuisia tietoja abstraktista luokista ja rajapinnoista missä tahansa C # -esittelyssä, mutta näiden kahden välisen eron ymmärtäminen on varsin kova osa. Voit yhdistää kaikki tiedot, joita et löydä ja jotka eivät vieläkään saa tarpeeksi. Sekä käsitteellisesti molemmat ovat tärkeimpiä ohjelmasuunnittelua ja ne ovat melko samat, mutta ne eroavat toisistaan ​​paljon funktionaalisesti. Vaikka abstrakti luokka on erityinen luokan tyyppi, joka toimii muiden luokkien tukikohdana, käyttöliittymä on toisaalta vain tyhjä kuori, jossa on vain jäsenilmoituksia.