Skip to main content

Posts

Showing posts with the label abstracta

Field like events and polymorphic invocation

Ce vi se pare gresit in codul de mai jos: public class Base { public virtual event EventHandler EventOne; } public class Derived : Base { public override event EventHandler EventOne; public void DoAction() { ... EventOne(this, args); } } In clasa de baza avem un eveniment la care se poate face override in orice clasa derivata. Desi la prima vedere totul pare sa fie in ordine daca ne uitam mai atent, putem sa observam o problema care poate sa apara din cauza la override. EventOne o sa existe in doua locatii diferite, atat in clasa de baza cat si in clasa derivata. Din aceasta cauza o sa fie momente cand EventOne din clasa de baza nu o sa fie niciodata instantiat. Din aceasta cauza, in cazul in care evenimentul este apelat din clasa de baza ne putem trezi cu un comportament ciudat, precum NullReferenceException sau sa se execute cod la aruncarea unui eveniment pe care noi nu ne-am astepta sa se execute. Ce putem sa facem ca sa rezolvam aceasta problema...

Metoda marcata cu abstract si override

O metoda sau o propietate poate sa fie marcata ca abstracta cand aceasta nu contine si implementarea. O metoda sau o propietate poate sa fie marcata ca override cand vrem sa modificam implementarea si sa oferim o noua implementare pentru un menbru mostenit din clasa de baza. Pana aici nimic deosebit, OOP pur. Oare putem sa avem o metoda care sa fie marcata atat abstracta cat si override? Raspunsul este DA. Desi pare ciudat, putem sa marcam o metoda cu aceste doua atribute: public void abstract override DoWork(); Cand putem sa avem acest caz? Cand avem o clasa abstracta care contine o metoda virtuala. public abstract Actiune { public virtual void DoWork() { Console.Write("Actiune1.DoWork"); } } Aceasta clasa poate sa fie mostenita de o alta clasa care sa ofere o alta implementare de baza la metoda DoWork. public abstract Actiune2 : Actiune { public abstract override void DoWork(); } Orice clasa ce va implementa clasa abstracta Actiune2 o sa fie obligata sa ...