Estoy usando C# 3.0. Siguiendo el patrón de eventos estándar que tengo:¿Mi clase debe suscribirse a sus propios eventos públicos?
public event EventHandler<EventArgs> SomeEventHappens;
protected virtual void OnSomeEventHappens(EventArgs e)
{
if (SomeEventHappens != null)
{
SomeEventHappens(this, e);
}
}
private object _someProperty;
public object SomeProperty
{
get
{
return _someProperty;
}
private set
{
if (_someProperty == value)
{
return;
}
OnSomeEventHappens(EventArgs.Empty);
_someProperty = value;
}
}
Dentro de mi misma clase me gustaría tomar algunas acciones cuando SomeProperty
cambios. La forma en que lo veo Tengo 3 alternativas:
1) Hacer cosas dentro de mi SomeProperty
setter. Algo me frota en el camino equivocado al hacer esto, ya que trato de suscribirme a la filosofía de que todo debería hacer una cosa y hacerlo bien. Arrebatar cosas en un setter parece ir en contra de eso, o al menos tiene la propensión a.
2) Haz cosas en OnSomeEventHappens
. De nuevo, parece ir un poco en contra de mantener esto en pedazos simples. Además, si se anula este método, podría perder funcionalidad si el implementador no llama al método base.
3) Haga que la clase se suscriba a SomeEventHappens
. Para mí, esta parece ser la elección correcta en lo que respecta a la encapsulación, y parece bastante limpia. Nuevamente, posibles repercusiones si se anula el OnSomeEventHappens
.
¿Tal vez hay algo más elegante? No puedo decidir entre la opción 2 y 3, y tengo curiosidad sobre cuáles son las mejores prácticas. Quizás el lugar más seguro esté en el establecimiento de la propiedad después de todo.
¿Pensamientos?
Actualización: Gracias por los buenos comentarios y respuestas a continuación. He aprendido que está "bien" tener una clase suscribirse a sus propios eventos, aunque en mi caso me inclino a no hacerlo debido a la sobrecarga. He pensado en el comportamiento de posibles usuarios de mis métodos virtuales y qué es exactamente lo que quiero que suceda.
En mi caso del mundo real, realmente no quiero que los eventos se levanten sin que se establezca la propiedad. Como las respuestas a continuación han guiado mi proceso de pensamiento, creo que puedo ir con la opción 1, debido a la menor sobrecarga, a la reducción del riesgo de un comportamiento inadecuado por parte de los herederos, y generalmente tiene más sentido para mí. ¡Gracias de nuevo!
Elegí esta respuesta porque era la explicación más cercana a lo que terminé haciendo. Aprendí mucho de las otras respuestas. ¡Gracias! –