2010-12-02 20 views
5

Utilicé eventos y delegaciones en muchos de mis proyectos, pero aún tengo algunas dudas en cuanto a dónde usar los eventos y delegados en un proyecto y cuál es la diferencia entre un delegado y un evento. ¿Alguien puede explicarlo? ¿Por favor?Dónde usar eventos y delegados?

+0

buena explicación aquí: http://blog.monstuff.com/archives/000040.html – SubniC

+0

Un evento es solo una forma especial de un delegado. – VVS

+0

posible duplicado de [Diferencia entre eventos y delegados y sus respectivas aplicaciones] (http://stackoverflow.com/questions/563549/difference-between-events-and- delegate-and-its-respective-applications) –

Respuesta

8

A Delegate es un tipo que puede encapsular una llamada a un método. Debe usar un delegado cuando quiera tratar el método como un objeto y pasarlo.

Un Event es solo una manera de exponer a un delegado como una propiedad a la que cualquier código fuera de su clase puede asociar a sus controladores pero no puede invocar al delegado. Si expone a su delegado como una propiedad pública, el código fuera de su clase no solo puede asociar a sus controladores, sino también invocar al delegado.

Además, Events también le permite agregar métodos de eliminación que se invocan cuando los manejadores se adjuntan \ se separan, al igual que el captador y el colocador de una propiedad pública que le permite controlar mejor el proceso.

Debe usar el evento cuando desee que otras clases se suscriban a un evento en su clase y se le notifique cuando ocurra.

public delegate void MyMessageHandlerType(string message); 

public class EventTest 
{ 
    public event MyMessageHandlerType MessageEvent 
    { 
     add { } // invoked when MessageEvent += SomeMethod 
     remove { } // invoked when MessageEvent -= SomeMethod 
    } 
} 
2

Ambos delegados y eventos proporcionan un mecanismo de devolución de llamada. Un evento proporciona un mecanismo de devolución de llamada que está algo menos conectado que un delagate, en ese puede tener cualquier número de controladores adjuntos, y que el código a menudo funciona de la misma manera independientemente del número de controladores (si corresponde). Un buen ejemplo podría ser un evento Resized de una ventana; el cambio de tamaño de la ventana funcionará independientemente de si hay algún controlador de eventos conectado; el evento es un mecanismo de notificación.

Un delegado está más conectado en muchos sentidos. Normalmente, puede asociar exactamente un método con un miembro delegado, y con frecuencia se esperan; tome los métodos de extensión LINQ (como Where) por ejemplo: no funcionarán a menos que proporcione exactamente un método para el parámetro de delegado.

Cuestiones relacionadas