Kaip žinia, ASP.NET puslapiuose egzistuoja komponentų hierarchija, pavyzdžiui, vienas komponentas-konteineris gali savyje turėti kitus konteinerius, o tie - dar kitus.
Elementariausias pavyzdys - lentelė, kurios vienoje iš celių yra mygtukas:
Dabar įsivaizduokime, kad norime prieiti prie eilutės (elemento TR), kuriai priklauso mygtukas btnTest. Paprasčiausiu atveju užtektų nusakyti
TableRow tr = (TableRow)btnTest.Parent.Parent
. Problema yra tame, kad ne visada įmanoma nusakyti per kiek lygių aukščiau yra reikalingas objektas. Tam reikia apibrėžti funkciją, kuri rekursiškai kiltų aukčiau ir tarp tėvų, protėvių, proprotėvių, … ieškotų reikiamo tipo objekto. Kadangi ieškomo objekto tipas nėra griežtai apibrėžtas, yra du sprendimai:
- Grąžinti Control tipo objektą, kurį vėliau reikės konvertuoti į ieškomą tipą
- Pasinaudoti bendrybėmis (generics) ir apibrėžti bendrybinę funkciją, kuri grąžins reikiamo tipo objektą
Kaip žinia, OOP skatina kuo mažiau naudoti konvertavimų į viršų (upcasting) ir žemyn (downcasting), todėl bendrybinė funkcija yra geresnis sprendimas.
Žemiau yra pateiktos dvi funkcijos, kurios skirtos nurodyto tipo tėvo ir vaiko paieškai:
Originalus straipsnis ir komentarai