.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

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -