Programavimas

Kada naudoti abstrakčią klasę ir sąsają C #

Kuriant programas svarbu žinoti, kada naudoti abstrakčią klasę, o kada - sąsają. Nors abstrakčios klasės ir sąsajos tam tikru požiūriu atrodo panašios, yra esminių skirtumų, kurie nulems, kuris yra geriausias pasirinkimas tam, ką bandote pasiekti. Šiame tinklaraščio įraše aptarsiu tuos skirtumus ir kaip nuspręsti, kada kurį naudoti.

Trumpas atsakymas: abstrakti klasė leidžia sukurti funkciją, kurią poklasiai gali įgyvendinti ar nepaisyti. Sąsaja leidžia tik apibrėžti funkcionalumą, o ne jį įgyvendinti. Nors klasė gali išplėsti tik vieną abstrakčią klasę, ji gali pasinaudoti keliomis sąsajomis.

C # abstrakti klasė paaiškinta

Abstrakti klasė yra specialus klasės tipas, kurio negalima iš karto nustatyti. Abstrakti klasė sukurta taip, kad ją paveldėtų poklasiai, kurie įgyvendina arba viršija jos metodus. Kitaip tariant, abstrakčios klasės yra arba iš dalies įgyvendinamos, arba visai neįgyvendinamos. Savo abstrakčioje klasėje galite turėti funkcionalumą - abstrakčios klasės metodai gali būti ir abstraktūs, ir konkretūs. Abstrakti klasė gali turėti konstruktorius - tai yra vienas pagrindinių skirtumų tarp abstrakčios klasės ir sąsajos. Galite pasinaudoti abstrakčių klasių pranašumais kurdami komponentus ir nurodydami tam tikrą bendrų funkcijų lygį, kurį turi įgyvendinti išvestinės klasės.

C # sąsaja paaiškinta

Sąsaja iš esmės yra sutartis - ji nėra įgyvendinama. Sąsajoje gali būti tik metodo deklaracijos; joje negali būti metodo apibrėžimų. Sąsajoje taip pat negalite turėti jokių narių duomenų. Nors abstrakčioje klasėje gali būti metodų apibrėžimai, laukai ir konstruktoriai, sąsajoje gali būti tik įvykių, metodų ir savybių deklaracijos. Sąsajoje deklaruotus metodus turi įdiegti sąsają įgyvendinančios klasės. Atminkite, kad klasė gali įdiegti daugiau nei vieną sąsają, bet išplėsti tik vieną klasę. Sąsają diegianti klasė turėtų įdiegti visus jos narius. Kaip ir abstrakčioje klasėje, sąsajos negalima sukurti.

Ar turėčiau naudoti abstrakčią klasę ar sąsają?

Abstraktios klasės suteikia jums lankstumą turėti tam tikrus konkrečius metodus ir kitus metodus, kuriuos turėtų įgyvendinti išvestinės klasės. Priešingai, jei naudojate sąsajas, turėsite įdiegti visus klasės metodus, kurie išplečia sąsają. Abstrakti klasė yra geras pasirinkimas, jei turite ateities išplėtimo planų, t. Y. Jei tikėtina, kad ateityje bus išplėsta klasės hierarchija. Jei norėtumėte ateityje palaikyti plėtrą naudodami sąsajas, turėsite išplėsti sąsają ir sukurti naują.

Jei reikia, į hierarchiją lengva pridėti naują sąsają. Tačiau, jei jau turite abstrakčią klasę savo hierarchijoje, negalite pridėti kitos - t. Y. Abstrakčios klasės galite pridėti tik tuo atveju, jei jų nėra. Turėtumėte naudoti sąsają, jei norite sudaryti sutartį dėl tam tikro elgesio ar funkcijų. Nereikėtų naudoti sąsajos, jei sąsajos metodams reikia rašyti tą patį kodą. Tokiu atveju turėtumėte naudoti abstrakčią klasę, vieną kartą apibrėžti metodą ir prireikus pakartotinai jį naudoti. Naudokite sąsajas norėdami atsieti savo programos kodą nuo konkretaus jo įdiegimo arba apriboti prieigą prie tam tikro tipo narių.

Kaip teigiama „Microsoft“ sąsajų dokumentuose:

Naudodami sąsajas, galite, pavyzdžiui, įtraukti elgesį iš kelių klasės šaltinių. Ši galimybė yra svarbi C #, nes kalba nepalaiko daugelio klasių paveldėjimo. Be to, turite naudoti sąsają, jei norite imituoti struktų paveldėjimą, nes jie iš tikrųjų negali paveldėti iš kitos struktūros ar klasės.

Numanomas ir aiškus sąsajos diegimas

Sąsajos gali būti įgyvendinamos netiesiogiai arba aiškiai. Leiskite man paaiškinti, kuo skiriasi šie du įgyvendinimai. Apsvarstykite sąsają, vadinamą „IBusinessLogic“.

viešoji sąsaja „IBusinessLogic“

{

anuliuoti Inicializuoti ();

}

Ši klasė pavadinta „BusinessLogic“ įgyvendina „IBusinessLogic“ sąsaja.

viešoji „BusinessLogic“ klasė: „IBusinessLogic“

{

public void Inicializuoti ()

   {

// Kažkas kodas

   }

}

Galite sukurti „BusinessLogic“ klasę ir paskambinkite Inicijuoti () metodas, kaip parodyta žemiau.

 „IBusinessLogic businessLogic“ = naujas „BusinessLogic“ ();

businessLogic.Initialize ();

Šis kodo fragmentas parodo, kaip galite įdiegti „IBusinessLogic“ sąsaja netiesiogiai.

viešoji „BusinessLogic“ klasė: „IBusinessLogic“

{

anuliuoti „IBusinessLogic“. Inicijuoti ()

   {

   }

}

Dabar galite pasinaudoti Inicijuoti () metodas tuo pačiu būdu, naudojant nuorodą į „IBusinessLogic“ sąsaja. Šių dviejų požiūrių skirtumas yra tas, kad aiškiai įdiegdami sąsają savo klasėje, jūs privalote naudoti savo sąsajos metodą naudodami tik nuorodą į sąsają. Todėl šis kodo fragmentas neveiks, t. Y. Nebus kompiliuojamas.

 „BusinessLogic“ businessLogic = naujas „BusinessLogic“ ();

businessLogic.Initialize ();

Kaip padaryti daugiau C #:

  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #