Refleksija yra labai galingas ir patogus būdas sužinoti objekto metaduomenis, bet viena didžiausių jos problemų (apart greitaveikos) – eilučių naudojimas. Tarkime, mes turime klasę Demo:



Norėdami refleksijos pagalba gauti priėjimą prie klasės savybės Text ir metodo Print, tai atrodytų taip:



Kaip matote, tam kad gauti PropertyInfo ar MethodInfo, reikia nurodyti objekto savybės ar metodo pavadinimą. Problema tame, kad pavadinimai yra tekstinės eilutės, todėl pasikeitus objekto savybės ar metodo pavadinimui, kodas ir toliau kompiliuosis, o apie klaidą sužinosime tik programos vykdymo metu.


Šiai problemai išspręsti galima pasirašyti pagalbinius metodus, kurie kaip argumentus priimtų Lamda išraiškas. Tai leis tipizuotai nurodyti pageidaujamą savybę ar metodą:



Žemiau yra pateiktas Reflector klasės kodas:



Reflector klasę jus rasite ir mano SBToolkite. Tikiuosi jūsų darbas su refleksija dar labiau pagerės!

Patiko (0)

Rodyk draugams