Soittokanta korvausmenetelmän sisällä

Tiedän, että perusmenetelmän kutsumisesta ohitetun menetelmän sisällä on kysyttävää, kuten tämä . Mutta entä jos ohitettu menetelmä kutsuu vain perusluokkaa? Onko tämä huono / hyvä kunnia? Näyttää vain oudolta, miksi ohittaa menetelmän vain tukikohdan kutsumiseksi?

Katso esimerkiksi:

public class BaseClass { virtual public void Method1() { //Do stuff } } public class InheritingClass : BaseClass { override public void Method1() { base.Method1(); } } 

Kommentit

  • Sillä ei ole tarkoitusta ja vain sekoitetaan koodi, joten päästä eroon.
  • @DavidArno että ' mitä ajattelin myös, varmistaen vain, että ' ei ollut siihen syytä ennen kuin tein niin
  • Ihanteellisessa maailmassa sovellus kattaa yksikötestit, joten voit poistaa sen, ja kun kaikki testit vielä läpäisivät, ' tiedät, että sitä ei tarvita '. Emme kuitenkaan <

asu aina ihanteellisessa maailmassa, joten oli järkevää kysyä 🙂

  • Ainoa syy, miksi ' d jätä koodi näyttämään yllä olevan kaltaiselta, jos ohitetussa menetelmässä oli aikaisemmin enemmän koodia ja se poistettiin, mutta sitä voitiin tarkastella lähdekoodijärjestelmän vanhojen versioiden kautta. Artifaktin jättäminen nykyiseen koodiin tällä tavoin voi ilmoittaa kehittäjälle tänään tarkastelemaan menetelmän edellisen version tiedoston ' historiaa.
  • vastaus

    Mutta entä jos ohitettu menetelmä kutsuu vain perusluokkaa? Onko tämä huono / hyvä muotoilu?

    Huono suunnittelu ? Ei, melko huono toteutus. Se on harhaanjohtavaa huolto-ohjelmoijaa varten. Kun en näe ohitusta, tiedän, että tukiasemaa kutsutaan. Ohitus kertoo minulle, että on jotain erilaista, vaikka tukikohta kutsutaan myös sinne.


    Ohituksen vaatiminen tukikohdan kutsumiseksi ilman mallia on huono muotoilu

    Viitattu ketju – suosituin vastaaja

    Oma ensimmäinen reaktioni skandinaaviseen ohitukseen malli on: KAAVAN KOODAAMINEN! Näyttää siltä, että minun on pakko lukea kaikki tämä ja sitten lisää varmistaakseni, että ”alikäyttäytyminen” ei riko koodiani ja päinvastoin.

    Template Method Pattern on hyvä tapa ilmaista muuttujakoodi suuremmassa koodivirrassa ja varmistaa oikea suoritusjärjestys.

    Kokemukseni mukaan aliluokalle on niin tyypillistä tietää mitä perusta-ilmoitettuja menetelmiä soittaa ja järjestyksessä Ota kasa kourallinen alaluokkia, joilla kaikilla on sama cut-n-paste-ohjausrakenne, lisää 5 vuoden huolto; nyt ymmärrät, miksi pidän parempana 101 todisteesta Villi Turkki .

    P.S. Kaikki tämä on yksi suuri syy, miksi haastan interface iden liikakäyttöä luokkien abstract sijaan.

    Kommentit

    • Rajapintojen liiallinen käyttö C #: ssa johtuu todennäköisesti siitä, ettei halua kahlita toteuttajaa kyseiseen abstraktiin perusluokkaan. Käyttöliittymän avulla toteuttaja voi toteuttaa toisen perusluokan eikä vain tuon tietyn abstraktin luokan. Se riippuu kuitenkin paljon olosuhteista. Minusta on hyvä käytäntö olla sekä IFoo -käyttöliittymä että FooBase -luokka, joka toteuttaa IFoo käyttöliittymä, jossa abstraktit menetelmäpyynnöt rekvisiittaa varten. Ehkä heittää myös ctor.

    Vastaa

    IMO, virtual -menetelmillä on perusluokassa hyvin yksinkertainen toteutus. Vaikka me override määritelmän virtual -menetelmälle lapsiluokassa, voimme silti kutsua virtual -menetelmä (perustoteutuksella), vaikka se on järkevää eikä vaikuta overridden -menetelmän suunniteltuun käyttäytymiseen lapsiluokassa.

    Esimerkiksi BaseCalculator tekee todellisen työn. Laskin koristaa BaseCalculator-kirjastoa laajentamalla sitä.

    public class BaseCalculator { public virtual T Add<T>(T number01, T number02) { return number01 + number02; } } public class Calculator: BaseCalculator { public override T Add<T>(T number01, T number02) { Console.WriteLine(number01 + " | " + number02); var result = base.Add<int>(1, 3); Console.WriteLine("Result: "+ result); return result; } } 

    K: Entä jos ohitettu menetelmä kutsuu vain perusluokkaa?

    A: Sinun tapauksessasi perusluokan menetelmä on virtual, meidän ei tarvitse override sitä, ennen kuin haluamme muuttaa sen käyttäytymistä.

    K: Onko tämä huono / hyvä kunnia?

    A: Kyllä, suunnittelu saattaa olla huono, koska se voi sekoittaa lähdekooditiedoston, kun lisätään tarpeettomia ohituksia.

    K: Näyttää vain oudolta, miksi ohittaa menetelmän vain tukikohdan kutsumiseksi?

    A: BaseCalculator tekee todellisen työn . Laskin koristaa BaseCalculator-kirjastoa laajentamalla sitä.

    Toivottavasti se auttaa!

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *