Uso de IDisposable para cancelar la suscripción de eventos

Tengo una clase que maneja eventos desde un control WinForms. Según lo que está haciendo el usuario, estoy defendiendo una instancia de la clase y creando una nueva para manejar el mismo evento. Primero necesito cancelar la suscripción de la instancia anterior del evento, lo cual es bastante fácil. Me gustaría hacer esto de una manera no propietaria si es posible, y parece que este es un trabajo para IDisposable. Sin embargo, la mayoría de la documentación recomienda IDisposable solo cuando se utilizan recursos no administrados, lo que no se aplica aquí.

Si implemento IDisposable y me doy de baja del evento en Dispose (), ¿estoy pervirtiendo su intención? ¿Debería proporcionar una función Unsubscribe () y llamar a eso?

Editar: Aquí hay un código ficticio que muestra lo que estoy haciendo (usando IDisposable). Mi implementación real está relacionada con algunos enlaces de datos patentados (larga historia).

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)
    {
        // do something
    }

    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);
    }
}

En el código real, la clase "EventListener" está más involucrada, y cada instancia es singularmente significativa. Los uso en una colección y los creo / destruyo a medida que el usuario hace clic.

Conclusión

Estoy aceptandoLa respuesta de gbjbaanb, por ahora. Siento que el beneficio de usar una interfaz familiar supera cualquier posible inconveniente de usarlo cuando no está involucrado ningún código no administrado (¿cómo podría saberlo un usuario de este objeto?).

Si alguien no está de acuerdo, publique / comente / edite. Si se puede hacer un mejor argumento contra IDisposable, entonces cambiaré la respuesta aceptada.

Respuestas a la pregunta(8)

Su respuesta a la pregunta