Delegados y eventos

28/10/2004 - 14:23 por Josema | Informe spam
Hola

Ultimamente estoy bastante interesado en saber como funcionan los eventos y
delegados. Pero empiezo a estar algo confundido. En algunos sitios de
internet me comentan que un evento y un delegado son lo mismo, en otros
lugares me comentan que no.

Lo unico que he sacado en claro sobre los delegados es que son una
herramienta con la que es posible llamar a un metodo de otra clase.

Podríais darme vuestra opinion sobre que son exactamente, cuando es bueno
usarlos, y que diferencia existe entre un evento y un delegado?

PD:Hasta ahora siempre que he usado eventos implemento tambien un delegado
de esta forma: y despues suscribo en otra clase que instancie esta, los
eventos... Es correcta esta manera de hacer las cosas en .NET?

public delegate void ManejadorEvento();
public class test
{
public event ManejadorEvento TestOK;
protected virtual void OnTestOK()
{
if(TestOK!=null)
{
TestOK();
}
}
public event ManejadorEvento TestKO;
protected virtual void OnTestKO()
{
if(TestKO!=null)
{
TestKO();
}
}

public static void Main()
{
try
{
Console.WriteLine("Hola Mundo");
TestOK();
}
catch
{
TestKO();
}
}
}

Gracias
Un saludo.
Josema
 

Leer las respuestas

#1 Ariel Popovsky
28/10/2004 - 17:05 | Informe spam
Hola Josema,

Los delegados se utilizan para definir y disparar eventos pero no son sinónimos. Cuando defines un delegado declaras la forma o signatura que debería tener un método para ser referenciado por ese delegado. Puedes usarlos para llamar a uno o más métodos de los que sabes la forma pero no necesariamente conoces de antemano.
En los eventos aprovechas los delegados para suscribir una cantidad de métodos con la misma signatura sin necesidad de conocer las clases que declaran esos métodos.

Aparte de usarse en eventos, los delegados tienen otros usos, por ejemplo call backs o llamadas asincrónicas.

Modifiqué un poco tu ejemplo:
public delegate void ManejadorEvento();

public class Test
{

public event ManejadorEvento TestOK;

protected virtual void OnTestOK()
{
if(TestOK!=null)
{
TestOK();
}
}

public Test()
{
}


public static void Main()
{
Test test = new Test();
test.TestOK+=new ManejadorEvento(test_TestOK);
test.FireEvent();

Test2 test2=new Test2();
test2.testMe();
}

private static void test_TestOK()
{
Console.WriteLine("Hola eventos!");
}

public void CallMeBack(ManejadorEvento metodo)
{
if(metodo!=null)
metodo();
}

public void FireEvent()
{
OnTestOK();
}
}

public class Test2
{
public void metodox()
{
Console.WriteLine("Gracias por llamarme!");
}

public void testMe()
{
Test test=new Test();
test.CallMeBack(new ManejadorEvento(metodox));
}

public Test2()
{

}
}

Espero haberte aclarado algo. Saludos!
Ariel Popovsky


Hola

Ultimamente estoy bastante interesado en saber como funcionan los
eventos y delegados. Pero empiezo a estar algo confundido. En algunos
sitios de internet me comentan que un evento y un delegado son lo
mismo, en otros lugares me comentan que no.

Lo unico que he sacado en claro sobre los delegados es que son una
herramienta con la que es posible llamar a un metodo de otra clase.

Podrà­ais darme vuestra opinion sobre que son exactamente, cuando es
bueno usarlos, y que diferencia existe entre un evento y un delegado?

PD:Hasta ahora siempre que he usado eventos implemento tambien un
delegado de esta forma: y despues suscribo en otra clase que
instancie esta, los eventos... Es correcta esta manera de hacer las
cosas en .NET?

public delegate void ManejadorEvento();
public class test
{
public event ManejadorEvento TestOK;
protected virtual void OnTestOK()
{
if(TestOK!=null)
{
TestOK();
}
}
public event ManejadorEvento TestKO;
protected virtual void OnTestKO()
{
if(TestKO!=null)
{
TestKO();
}
}
public static void Main()
{
try
{
Console.WriteLine("Hola Mundo");
TestOK();
}
catch
{
TestKO();
}
}
}

Preguntas similares