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");
}
}

}

Preguntas similare

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();
}
Respuesta Responder a este mensaje
#2 Fernando Gómez
26/05/2008 - 19:35 | Informe spam
On May 26, 12:34 pm, Fernando Gómez
wrote:
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();
}



Por cierto, un delegado solo puede apuntar a una sola función,
mientras que un evento tiene una colección de funciones (delegados),
por lo que podrías tener varias funciones que se disparen al mismo
tiempo.

Quizás esa sea la diferencia más importante.

Saludos.
Respuesta Responder a este mensaje
#3 Michael Soza
27/05/2008 - 09:55 | Informe spam
Estimado, los delegados pueden apuntar a mas de una funcion sin
inconveniente, por lo cual mi duda aun persiste. No puedo encontrar algo
que diferencie a los eventos de los delegados :(
ejemplo:


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

namespace ConsoleApplication1
{
class Program
{
public delegate void Saludar(string nombre);
public Program()
{
Saludar saludo = new Saludar(MostrarSaludo);
saludo += new Saludar(SaludoDespedir);
saludo("Michael");
}
private void MostrarSaludo(string Nombre)
{
Console.WriteLine("Hola {0}",Nombre);
}
private void SaludoDespedir(string Nombre)
{
Console.WriteLine("Adios {0}", Nombre);
}

static void Main(string[] args)
{
Program p = new Program();
Console.ReadLine();
}

}
}

"Fernando Gómez" escribió en el mensaje de
noticias:
On May 26, 12:34 pm, Fernando Gómez
wrote:
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();
}



Por cierto, un delegado solo puede apuntar a una sola función,
mientras que un evento tiene una colección de funciones (delegados),
por lo que podrías tener varias funciones que se disparen al mismo
tiempo.

Quizás esa sea la diferencia más importante.

Saludos.
Respuesta Responder a este mensaje
#4 RFOG
27/05/2008 - 10:59 | Informe spam
Como bien has dicho, tanto los eventos como los delegados pueden contener
varios "callback". Aunque en C# la diferencia no está bien delimitada (como
otras tantas cosas más), se conocen como delegados normales a aquellos que
sólo contienen un callback y delegados multicast a los que contienen varios,
e imagino que la implementación interna será diferente (ya que, por ejemplo,
C++/CLI sólo permite multicast). No estoy seguro, pero en el caso de los
eventos es el mismo, o quizás solo haya eventos multicast.

El concepto de delegado está en relación al callback tradicional de Win32,
es decir, un método público que será llamado desde otra parte (incluso otro
proceso), mientras que el del evento está en relación a la misma clase, y
tiene más relación con el "message handler" de Win32. Un evento se construye
a partir de un delegado.

Digamos que el delegado es la evolución del callback puro y público (mirate
el "EnumWindows" de Win32) y el evento es la evolución del "manejador de
mensajes" de Win32 (mírate "message crackers").

Aparte de que un evento no se puede asignar fuera de la propia clase y un
delegado sí (o al menos eso creo), la diferencia fundamental está en el
concepto en sí.

Otra diferencia no creo que haya, ya que el único "concepto semántico
diferencial" podría ser el que el evento se pudiera llamar de forma
asíncrona (por su nombre) frente al delegado, que tiene concepto de
"delegación de tarea", pero ambos se pueden llamar asíncronamente...
Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
La calumnia siempre es sencilla y verosímil.

"Michael Soza" wrote in message
news:
Estimado, los delegados pueden apuntar a mas de una funcion sin
inconveniente, por lo cual mi duda aun persiste. No puedo encontrar algo
que diferencie a los eventos de los delegados :(
ejemplo:


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

namespace ConsoleApplication1
{
class Program
{
public delegate void Saludar(string nombre);
public Program()
{
Saludar saludo = new Saludar(MostrarSaludo);
saludo += new Saludar(SaludoDespedir);
saludo("Michael");
}
private void MostrarSaludo(string Nombre)
{
Console.WriteLine("Hola {0}",Nombre);
}
private void SaludoDespedir(string Nombre)
{
Console.WriteLine("Adios {0}", Nombre);
}

static void Main(string[] args)
{
Program p = new Program();
Console.ReadLine();
}

}
}

"Fernando Gómez" escribió en el mensaje de
noticias:
On May 26, 12:34 pm, Fernando Gómez
wrote:
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();
}



Por cierto, un delegado solo puede apuntar a una sola función,
mientras que un evento tiene una colección de funciones (delegados),
por lo que podrías tener varias funciones que se disparen al mismo
tiempo.

Quizás esa sea la diferencia más importante.

Saludos.



Respuesta Responder a este mensaje
#5 Octavio Hernandez
27/05/2008 - 12:23 | Informe spam
La manera en que yo defino qué es un evento en mis cursos de iniciación, y
que creo
que "llega" bastante bien a la gente, es la siguiente:

"UN EVENTO ES (MAS O MENOS) UNA PROPIEDAD CUYO TIPO ES UN TIPO DELEGADO"

Por supuesto, en ese momento ya se han presentado los conceptos de delegado
(como parte del sistema de tipos de .NET) y de propiedad (como parte del
mismo
tema que los eventos, las clases y sus posibilidades).

Después de dar la definición, uso como ejemplo la clase Persona. Del mismo
modo que
ésta tiene una propiedad Nombre, de tipo string, o Edad, de tipo int,
podemos
agregarle otra "propiedad" FestejarCumpleaños (un evento) a la que podremos
asignar las acciones que la persona concreta realizará el día de su cumple.
Por ejemplo,

Persona p = new Persona();
p.Nombre = "Pepe";
p.Edad = 26;
p.FestejarCumpleaños += InvitarNoviaACenar;
p.FestejarCumpleaños += IrAlCine;
// etc.

Observa que de la definición que he dado se desprende que los eventos solo
pueden
definirse dentro de una clase (como las propiedades), que pueden "apuntar" a
más de
una función (como los delegados), y que solo se le pueden aplicar las mismas
operaciones
que a los delegados (+=, -=).

Salu2 - Octavio



"Michael Soza" wrote in message
news:
Estimado, los delegados pueden apuntar a mas de una funcion sin
inconveniente, por lo cual mi duda aun persiste. No puedo encontrar algo
que diferencie a los eventos de los delegados :(
ejemplo:


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

namespace ConsoleApplication1
{
class Program
{
public delegate void Saludar(string nombre);
public Program()
{
Saludar saludo = new Saludar(MostrarSaludo);
saludo += new Saludar(SaludoDespedir);
saludo("Michael");
}
private void MostrarSaludo(string Nombre)
{
Console.WriteLine("Hola {0}",Nombre);
}
private void SaludoDespedir(string Nombre)
{
Console.WriteLine("Adios {0}", Nombre);
}

static void Main(string[] args)
{
Program p = new Program();
Console.ReadLine();
}

}
}

"Fernando Gómez" escribió en el mensaje de
noticias:
On May 26, 12:34 pm, Fernando Gómez
wrote:
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();
}



Por cierto, un delegado solo puede apuntar a una sola función,
mientras que un evento tiene una colección de funciones (delegados),
por lo que podrías tener varias funciones que se disparen al mismo
tiempo.

Quizás esa sea la diferencia más importante.

Saludos.



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida