.net - Using IDisposable to unsubscribe events -
i have class handles events winforms control. based on user doing, deferencing 1 instance of class , creating new 1 handle same event. need unsubscribe old instance event first - easy enough. i'd in non-proprietary manner if possible, , seems job idisposable. however, documentation recommends idisposable when using unmanaged resources, not apply here.
if implement idisposable , unsubscribe event in dispose(), perverting intention? should instead provide unsubscribe() function , call that?
edit: here's dummy code kind of shows i'm doing (using idisposable). actual implementation related proprietary data binding (long story).
class eventlistener : idisposable { private textbox m_textbox; public eventlistener(textbox textbox) { m_textbox = textbox; textbox.textchanged += new eventhandler(textbox_textchanged); } void textbox_textchanged(object sender, eventargs e) { // } public void dispose() { m_textbox.textchanged -= new eventhandler(textbox_textchanged); } } class myclass { eventlistener m_eventlistener = null; textbox m_textbox = new textbox(); void seteventlistener() { if (m_eventlistener != null) m_eventlistener.dispose(); m_eventlistener = new eventlistener(m_textbox); } } in actual code, "eventlistener" class more involved, , each instance uniquely significant. use these in collection, , create/destroy them user clicks around.
conclusion
i'm accepting gbjbaanb's answer, @ least now. feel benefit of using familiar interface outweighs possible downside of using no unmanaged code involved (how user of object know that?).
if disagrees - please post/comment/edit. if better argument can made against idisposable, i'll change accepted answer.
yes, go it. although people think idisposable implemented unmanaged resources, not case - unmanaged resources happens biggest win, , obvious reason implement it. think acquired idea because people couldn't think of other reason use it. not finaliser performance problem , not easy gc handle well.
put tidy-up code in dispose method. it'll clearer, cleaner , more prevent memory leaks , damn sight easier use correctly trying remember un-do references.
the intention of idisposable make code work better without having lots of manual work. use power in favour , on artificial "design intention" nonsense.
i remember difficult enough persuade microsoft of usefulness of deterministic finalisation when .net first came out - won battle , persuaded them add (even if design pattern @ time), use it!
Comments
Post a Comment