Ing.
Publicado por Joel Mendez (1 intervención) el 27/03/2006 15:37:36
Hola,
He diseñado una clase que contiene un objeto (Timer) que expone un evento (Tick). Quisiera exponer este evento "internal" a los usuarios de mi clase, sin exponer el objeto Timer completo (para mantener encapsulación). En otras palabras, mi codigo es:
public class Test
{
private Timer _timer = new Timer();
public DoStuff(int interval)
{
_timer.Interval = interval;
_timer.Start();
}
}
Y quisiera que los usuarios de mi clase pudieran escribir este tipo de código:
Test test = new Test();
test.Tick += new EventHandler(MyHandler);
test.Start(1000);
Yo intento escribir este código en la clase Test:
public event EventHandler Tick = _timer.Tick;
Pero no es válido (no compila). La unica solución hasta ahora es exponer el objeto Timer completo:
public class Test
{
// ...
public Timer Timer { get { return(_timer); } }
// ...
}
Entonces el usuario puede escribir:
test.Timer.Tick += new EventHandler(MyHandler);
Pero también se exponen directamente todos los métodos de _timer.
Otra solución puede hacer lo siguiente en dos pasos: conectar el Timer.Tick a un metodo Test internal y desde éste método, disparar otro evento público declarado en la clase Test. Pero esto generará dos eventos en lugar de uno y no me parece elegante.
Alguien tiene una idea como "exponer" un evento internal a el usuario del objeto dejándo el código elegante y funcional?
He diseñado una clase que contiene un objeto (Timer) que expone un evento (Tick). Quisiera exponer este evento "internal" a los usuarios de mi clase, sin exponer el objeto Timer completo (para mantener encapsulación). En otras palabras, mi codigo es:
public class Test
{
private Timer _timer = new Timer();
public DoStuff(int interval)
{
_timer.Interval = interval;
_timer.Start();
}
}
Y quisiera que los usuarios de mi clase pudieran escribir este tipo de código:
Test test = new Test();
test.Tick += new EventHandler(MyHandler);
test.Start(1000);
Yo intento escribir este código en la clase Test:
public event EventHandler Tick = _timer.Tick;
Pero no es válido (no compila). La unica solución hasta ahora es exponer el objeto Timer completo:
public class Test
{
// ...
public Timer Timer { get { return(_timer); } }
// ...
}
Entonces el usuario puede escribir:
test.Timer.Tick += new EventHandler(MyHandler);
Pero también se exponen directamente todos los métodos de _timer.
Otra solución puede hacer lo siguiente en dos pasos: conectar el Timer.Tick a un metodo Test internal y desde éste método, disparar otro evento público declarado en la clase Test. Pero esto generará dos eventos en lugar de uno y no me parece elegante.
Alguien tiene una idea como "exponer" un evento internal a el usuario del objeto dejándo el código elegante y funcional?
Valora esta pregunta


0