Eventos vs Delegados

25/05/2008 - 03:48 por Michael Soza | Informe spam
Quisiera saber cual es la diferencia entre un evento y un delegado.e
estudiado ambos, pero aun no puedo esclarecer el proposito de la instruccion
event, pongo como ejemplo el siguiente codigo. En el cree un evento que se
lanza cuando aumento la edad y un delegado que se lanza en la misma
situacion.si el metodo que hubiera asociado a ambos fuera el
mismo no habria causal para utilizar eventque alguen me
ayude porfavor a entender esto!!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace gen
{
class Program
{
static void Main(string[] args)
{
loco makol = new loco("Michael", "Soza", 23);
makol.mehagoviejo += new EventHandler(makol.makol_mehagoviejo);
makol.saludo += new loco.Saludar(MostrarEdad);
makol.Edad++;
makol.Edad++;
makol.Edad++;
Console.ReadLine();
}
static public void MostrarEdad(int algo)
{
Console.WriteLine("Tengo {0}",algo);
}

}

class loco
{
string nombre, apellido;
public event EventHandler mehagoviejo;
public delegate void Saludar(int algo);
public Saludar saludo;
int edad;
public loco(string nom, string app, int ed)
{
nombre = nom;
apellido = app;
edad = ed;
}

public string Nombre {
get { return nombre; }
set { nombre = value; }
}
public string Apellido
{
get { return apellido; }
set { apellido = value; }
}
public int Edad
{
get { return edad; }
set {
if (value>edad)
{
mehagoviejo(this, EventArgs.Empty);
saludo(this.edad);
}
edad = value; }
}
public void makol_mehagoviejo(object sender, EventArgs e) {
Console.WriteLine("me hago mas viejo");
}
}

}
 

Leer las respuestas

#1 Fernando Gómez
26/05/2008 - 19:34 | Informe spam
On May 24, 8:48 pm, "Michael Soza" wrote:
Quisiera saber cual es la diferencia entre un evento y un delegado.e
estudiado ambos, pero aun no puedo esclarecer el proposito de la instruccion
event, pongo como ejemplo el siguiente codigo. En el cree un evento que se
lanza cuando aumento la edad y un delegado que se lanza en la misma
situacion.si el metodo que hubiera asociado a ambos fuera el
mismo no habria causal para utilizar eventque alguen me
ayude porfavor a entender esto!!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace gen
{
class Program
{
static void Main(string[] args)
{
loco makol = new loco("Michael", "Soza", 23);
makol.mehagoviejo += new EventHandler(makol.makol_mehagoviejo);
makol.saludo += new loco.Saludar(MostrarEdad);
makol.Edad++;
makol.Edad++;
makol.Edad++;
Console.ReadLine();
}
static public void MostrarEdad(int algo)
{
Console.WriteLine("Tengo {0}",algo);
}

}

class loco
{
string nombre, apellido;
public event EventHandler mehagoviejo;
public delegate void Saludar(int algo);
public Saludar saludo;
int edad;
public loco(string nom, string app, int ed)
{
nombre = nom;
apellido = app;
edad = ed;
}

public string Nombre {
get { return nombre; }
set { nombre = value; }
}
public string Apellido
{
get { return apellido; }
set { apellido = value; }
}
public int Edad
{
get { return edad; }
set {
if (value>edad)
{
mehagoviejo(this, EventArgs.Empty);
saludo(this.edad);
}
edad = value; }
}
public void makol_mehagoviejo(object sender, EventArgs e) {
Console.WriteLine("me hago mas viejo");
}
}

}



Un delegado es un "callback", es decir, una variable cuyo valor, en
vez de ser una referencia en memoria, es una referencia a una función/
método. Un evento es una colección de referencias a funciones que, en
el momento en el que se dispara, son llamados. Los eventos, por ende,
hacen uso extensivo de los delegados (i.e. referencias a funciones).

En tu caso, no es necesario que crees un delegado, ya que el delegado
empleado es EventHandler. Luego entonces, solo necesitas una función
que cumpla con el prototipo del delegado EventHandler.

class loco
{
string nombre, apellido;
public event EventHandler mehagoviejo;
public Saludar saludo;
int edad;

public loco(string nom, string app, int ed)
{
nombre = nom;
apellido = app;
edad = ed;
}

public string Nombre {
get { return nombre; }
set { nombre = value; }
}
public string Apellido
{
get { return apellido; }
set { apellido = value; }
}
public int Edad
{
get { return edad; }
set {
if (value>edad)
{
mehagoviejo(this, EventArgs.Empty);
saludo(this.edad);
}
edad = value; }
}

public void OnMeHagoViejo(object sender, EventArgs e)
{
// hacer algo aquí
}

public void makol_mehagoviejo(object sender, EventArgs e) {
Console.WriteLine("me hago mas viejo");
}
}

static void Main(string[] args)
{
loco makol = new loco("Michael", "Soza", 23);
makol.mehagoviejo += new
EventHandler(makol.OnMeHagoViejo);
makol.Edad++;
makol.Edad++;
makol.Edad++;
Console.ReadLine();
}

Preguntas similares