Eventos en Colección

22/10/2007 - 12:00 por Plextor | Informe spam
Hola, agradecería que alguien me echase un cable:

Tengo una clase (A) que controla diversos dispositivos. Para ello, ésta
clase A, tiene una instancia de una colección de objetos (D).

Según una lógica de funcionamiento, voy accediendo a los diferentes
objetos de la colección (dispositivos) y cambiando propiedades de ellos,
los cuales según programación pueden generar un evento que debería ser
capturado por la clase A.

Resumiendo: Como puedo generar una colección de objetos, los cuales
pueden enviar un evento a la clase instanciadora. Todo ello (claro está)
sin crear un delegado nuevo para cada uno de los objetos de la colección.

Un saludo, y perdón por el ladrillo
Plextor
 

Leer las respuestas

#1 Alberto Poblacion
22/10/2007 - 12:11 | Informe spam
"Plextor" wrote in message
news:
Tengo una clase (A) que controla diversos dispositivos. Para ello, ésta
clase A, tiene una instancia de una colección de objetos (D).

Según una lógica de funcionamiento, voy accediendo a los diferentes
objetos de la colección (dispositivos) y cambiando propiedades de ellos,
los cuales según programación pueden generar un evento que debería ser
capturado por la clase A.

Resumiendo: Como puedo generar una colección de objetos, los cuales pueden
enviar un evento a la clase instanciadora. Todo ello (claro está) sin
crear un delegado nuevo para cada uno de los objetos de la colección.



Se puede crear un tipo único de delegado para todos los objetos. Cada uno
de ellos declara un evento del tipo de ese delegado. La clase A, al ir
agregando elementos a la colección, va conectando el evento de cada uno de
ellos a un método común dentro de la clase. Dentro de dicho evento, se puede
saber cuál de los elementos de la colección lo disparó gracias al parámetro
"sender".

public delegate void MiTipoDeDelegado(object sender, EventArgs e);
...
public class D
{
public event MiTipoDeDelegado MiEvento;
...
protected void DispararElEvento()
{
if (MiEvento!=null) MiEvento(this, EventArgs.Empty);
}
}
...
public class A
{
List<D> coleccion = new List<D>;
...
public void CargarColeccion()
{
for (..)
{
D elemento = new D();
D.MiEvento += new MiTipoDeDelegado(MiRutina);
coleccion.Add(elemento);
}
}
...
public void MiRutina(object sender, EventArgs e)
{
//El remitente del evento es (D)sender;
}
}

Preguntas similares