Skip to main content

Posts

Showing posts with the label property

Access a property using reflection

Cum putem face get/set la o proprietate prin intermediul la reflection. Odata ce avem tipul obiectului care contine proprietate, este de ajuns sa apelam InvokeMember si sa specificam numele proprietatii. private TReturn GetProperty<TReturn>(object obj, string propertyName) { return (TReturn) obj.GetType().InvokeMember( propertyName, BindingFlags.GetProperty, null, obj, null); } private void SetProperty(object obj, string propertyName, object value) { obj.GetType().InvokeMember( propertyName, BindingFlags.SetProperty, null, obj, new object[] { value }); } BindingsFlags se poate seta printr-un OR logic, in functie de proprietatea cu care lucram( publica, privata, statica, etc). De exemplu, pentru o proprietate publica si care nu este statica putem sa avem urmatorul apel: obj.GetType().InvokeMember( prope...

Fields vs properties

De unde a pornit totul: De la o discutie in care se spunea ca la inceput este mai bine sa folosim field-uri si nu proprietatiile, iar in cazul in care ajungem sa avem nevoie de ele, le putem înlocuii in orice moment cu propietati. Aici apare o problema. Din punct de vedere a framework-ului field-urile si proprietatiile sunt total diferite (sunt binar incompatibile). Din aceasta cauza o sa fim nevoiti sa recompilam toate assembly-urile care folosesc obiectul nostru. In cazul in care folosim reflection la accesarea field-urilor trebuie modificat, deoarece modul in care proprietatiilese acceseaza este diferit. Singurul avantaj care apare la field-uri este performanta, care poate sa fie îmbunătățita foarte mult. Totodata field-urile pot sa fie folosite ca si parametri ref sau out. Cand se folosesc propietati se poate controla modul in care valoarea se seteaza (validare) sau se obtine (get,set). In cazul in care modifiarea unei proprietati produce modificarea altor valori, acest lucru poate...

Windows Azure - static properties & fields

Variabilele de tip static pe Azure nu sunt chiar statice. Din cauza ca nu stim intr-un anumit moment pe ce instanta putem sa ajunge printr-un call, nu trebuie sa presupunem ca intre doua call-uri consecutive o sa ajungem pe aceiasi masina. Aceasta problema apare mai ales in cazul variabilelor care le initializam printr-o metoda publica intr-un anumit moment diferit de initializarea aplicatiei. Din aceasta cauza cel mai bine este sa lucram cu propietati, nu cu field-uri si sa avem un cod asemanator cu cel pentru Singleton. private static ObjA _item; private static object _itemLock; public static ObjA Item { get; { if(_item == null) { InitItem (); } return _item; } } private static InitItem() { lock(_itemLock) { if(_item == null) { ...