Una de las bondades de .NET y en particular en C# es el uso de delegados que no es mas que un apuntador hacia una funcion o método como en C++ usábamos apuntadores pero tenían un problema al menos para mi en el desarrollo de sistemas era que en ocasiones apuntaba a un valor nulo, siempre y cuando la función no se había inicializado o bien podrían contener valores (basura).
Esto lo resuelve C# usando delegados y su uso es bastante útil como lo vamos a ver a continuación:
supongamos que queremos hacer dos cosas al mismo tiempo dentro de nuestro sistema ya se lo que esta pensando "por que no usar métodos asíncronos " pues bien si nosotros abusamos de esta regla de desarrollo nuestro sistema se hará muy lento y la solución seria DELEGADOS, que en realidad la demostración sera muy simple; añadimos un proyecto de windows forms, y a nuestro form le agregamos un Boton y dos ListBox; en nuestra clase Form ponemos estos dos métodos:
private void lista1()
{
for (int i = 0; i <= 500; i++)
{
listBox1.Items.Add("Agregar Dato");
}
}
private void lista2()
{
for (int i = 0; i <= 500; i++)
{
listBox2.Items.Add(listBox1.Items[i].ToString());
}
}
y declaramos un delegado así:
private delegate void generar();
Dentro de nuestro evento Click del Boton generamos tres delegados, uno para cada método y el otro sera una combinación de ambos:
private void button1_Click(object sender, EventArgs e)
{
generar l1 = lista1;
generar l2 = lista2;
generar combinado = l1+ l2;
combinado();
}
private void button1_Click(object sender, EventArgs e)
{
generar ejecutar = anexar;
/* generar ejecutar2 = lista2;
generar combinado = ejecutar + ejecutar2;*/
ejecutar();
}
simple no es verdad?
Esto lo resuelve C# usando delegados y su uso es bastante útil como lo vamos a ver a continuación:
supongamos que queremos hacer dos cosas al mismo tiempo dentro de nuestro sistema ya se lo que esta pensando "por que no usar métodos asíncronos " pues bien si nosotros abusamos de esta regla de desarrollo nuestro sistema se hará muy lento y la solución seria DELEGADOS, que en realidad la demostración sera muy simple; añadimos un proyecto de windows forms, y a nuestro form le agregamos un Boton y dos ListBox; en nuestra clase Form ponemos estos dos métodos:
private void lista1()
{
for (int i = 0; i <= 500; i++)
{
listBox1.Items.Add("Agregar Dato");
}
}
private void lista2()
{
for (int i = 0; i <= 500; i++)
{
listBox2.Items.Add(listBox1.Items[i].ToString());
}
}
y declaramos un delegado así:
private delegate void generar();
Dentro de nuestro evento Click del Boton generamos tres delegados, uno para cada método y el otro sera una combinación de ambos:
private void button1_Click(object sender, EventArgs e)
{
generar l1 = lista1;
generar l2 = lista2;
generar combinado = l1+ l2;
combinado();
}
si ejecutamos el código veremos que ambos métodos se ejecutan al mismo tiempo y esto se debe a que combinamos los dos delegados en uno solo, pero también podemos hacer lo mismo con un evento que en perspectiva es prácticamente lo mismo ya que un evento es un delegado que contiene métodos pero vamos a ver como quedaría :
private void lista(object sender, EventArgs e )
{
for (int i = 0; i <= 500; i++)
{
listBox2.Items.Add(listBox1.Items[i].ToString());
}
}
este seria mi evento que como podemos ver hace lo mismo que el metodo lista2, ahora lo que nos queda es suscribirnos a este evento que seria dentro de nuestro constructor del nuestro form
public Form1()
{
InitializeComponent();
button1.Click+=lista;
}
ahora haremos un pequeño cambio en nuestro evento Click del boton:private void lista(object sender, EventArgs e )
{
for (int i = 0; i <= 500; i++)
{
listBox2.Items.Add(listBox1.Items[i].ToString());
}
}
este seria mi evento que como podemos ver hace lo mismo que el metodo lista2, ahora lo que nos queda es suscribirnos a este evento que seria dentro de nuestro constructor del nuestro form
public Form1()
{
InitializeComponent();
button1.Click+=lista;
}
private void button1_Click(object sender, EventArgs e)
{
generar ejecutar = anexar;
/* generar ejecutar2 = lista2;
generar combinado = ejecutar + ejecutar2;*/
ejecutar();
}
simple no es verdad?
Comentarios
Publicar un comentario