Hívásbázis felülbírálási módszeren belül

Tudom, hogy vannak kérdések az alap módszer meghívásával egy felülbírált módszeren belül, például ezt . De mi van akkor, ha egy felülbírált módszer csak az alaposztályt hívja meg? Ez rossz / jó becsület? Csak furcsának tűnik, miért írjuk felül a metódust, hogy mégis meghívjuk a bázist?

Például lásd:

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

Megjegyzések

  • Nincs célja, és csak összezavarja a kódot, ezért szabaduljon meg tőle.
  • @DavidArno, hogy ' s amire én is gondoltam, csak megbizonyosodtam róla, hogy ' nincs oka ennek, mielőtt megtettem
  • Egy ideális világban az alkalmazást lefedik egység tesztek, így eltávolíthatja, és amikor a tesztek még mindig sikeresek voltak, ' tudta, hogy nincs rá szükség '. Azért nem ' mindig élünk abban az ideális világban, ezért ésszerű volt megkérdezni 🙂
  • Az egyetlen ok, amiért <

hagyja a kódot úgy néz ki, mint a fentiek, ha korábban több kód volt az felülbírált módszerben, és eltávolították, de a forrásvezérlő rendszer régi verzióin keresztül megtekinthető volt. Ha az aktuális kódban így hagy egy műterméket, jelezheti a mai fejlesztőnek, hogy megtekinthesse a módszer előző verziójának ' fájljának előzményeit.

Válasz

De mi van akkor, ha egy felülbírált módszer csak az alaposztályt hívja meg? Ez rossz / jó design?

Rossz tervezés ? Nem, meglehetősen rossz végrehajtás. Ez félrevezető a karbantartó programozó számára. Ha nem látok felülírást, akkor tudom az alapot hívják. Egy felülbírálás azt mondja nekem, hogy van valami más, még akkor is, ha a bázist oda is behívják.


A felülírás megkövetelése az alap sablon nélküli hívásához rossz tervezés

Hivatkozott szál – a legnépszerűbb válaszadó

A kezdeti reakcióm a skandináv felülírásra model is: HORRÓ KÓDOLÁSA! Úgy tűnik, kénytelen vagyok elolvasni mindezt, majd még többet, hogy megbizonyosodjak arról, hogy az “al-viselkedés” nem sérti-e a kódomat, és fordítva.

A Template Method Pattern jó módszer a változó kód kifejezésére egy nagyobb kódfolyamaton belül és a helyes végrehajtási sorrend biztosítása.

Tapasztalataim szerint annyira jellemző, hogy egy alosztálynak tudnia kell milyen alap-deklarált módszereket hívjon és sorrendben. Vegyünk egy halom maroknyi alosztályt, ugyanazzal a cut-n-paste kontroll struktúrával, adjunk hozzá 5 év karbantartást; most már megértette, miért választom a 101 proof Wild Turkey -t.

P.S. Mindez egy nagy oka annak, hogy a interface ek túlzott használata ellen abstract osztályok helyett

Megjegyzések

  • Az interfészek túlzott használata a C # -ben valószínűleg abból adódik, hogy nem akarja a végrehajtót az adott absztrakt alaposztályhoz kötni. Az interfész használata lehetővé teszi a megvalósító számára, hogy egy másik alaposztályt valósítson meg, és ne csak az adott absztrakt osztályt. Nagyon függ ez a körülményektől. Jó gyakorlatnak tartom, ha van egy IFoo interfész és egy FooBase osztály, amely a IFoo interfész, elvont metódus-hívásokkal a kellékek metódusaira és automatikus tulajdonságaira. Lehet, hogy dob egy ctorot is.

Válasz

IMO, virtual módszerek az alaposztályban nagyon alapvető megvalósításúak. Még akkor is, ha override meghatározzuk a virtual metódust a gyermekosztályban, akkor is hívhatjuk a div> módszer (alapvető megvalósítással), bár van értelme, és nem befolyásolja a overridden módszer rendelt viselkedését a gyermekosztályban.

Például a BaseCalculator elvégzi az igazi munkát. A Számológép kibővíti a BaseCalculator könyvtárat.

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: Mi van, ha egy felülbírált módszer csak az alaposztályt hívja meg?

A: Az Ön esetében az alaposztályú metódus virtual, addig nem kell override addig dolgozni, amíg meg nem akarjuk változtatni a viselkedését.

K: Ez rossz / jó becsület?

A: Igen, rosszul lehetne megtervezni, mert megzavarhatja a forráskód fájlt, miközben felesleges felülírásokat adunk hozzá.

K: Csak furcsának tűnik. Miért is írhatná felül a metódust csak azért, hogy felhívja a bázist?

A: A BaseCalculator elvégzi a valódi munkát . A Számológép kibővíti a BaseCalculator könyvtárat.

Remélem, segít!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük