Kaip žinia, ASP 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:

ASP.net generics code screen 1

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 () 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:

ASP.net generics code screen 2

(kopijuoti kodą)

Originalus straipsnis ir komentarai

Panašūs straipsniai


Komentarai uždrausti.