C sharp - Ing.

 
Vista:

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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder