Abstrakti luokka ja liitäntä C #
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 #
- 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ä.
- 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.
- 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.
- 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.
- 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.
- 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.
- Rakentajan julistus - Vaikka abstraktilla luokalla voi olla rakentajailmoitus, rajapinnalla ei voi olla rakentajan ilmoitusta.
- 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.
- 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
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.