with tutorial sharp referencia poo polimorfismo example ejemplo clases clase oop design-patterns delegates

oop - tutorial - ¿Dónde uso delegados?



referencia de clase en c# (8)

¿Cuáles son algunos lugares del mundo real que requieren delegados? Tengo curiosidad por saber qué situaciones o patrones hay cuando este método es la mejor solución. No se requiere código


Un delegado es un tipo con nombre que define un tipo particular de método. Así como una definición de clase establece todos los miembros para el tipo de objeto dado que define, el delegado establece la firma del método para el tipo de método que define.

En función de esta afirmación, un delegado es un puntero de función y define cómo se ve esa función.

Un gran ejemplo para una aplicación en el mundo real de un delegado es el Predicate . En el ejemplo del enlace, observará que Array.Find toma la matriz para buscar y luego un predicado para manejar los criterios de qué buscar. En este caso, pasa un método ProductGT10 que coincide con la firma del predicado.


Como se indica en "Learning C # 3.0: dominar los fundamentos de C # 3.0"

Escenario general: cuando muere un jefe de estado, el presidente de los Estados Unidos generalmente no tiene tiempo para asistir personalmente al funeral. En cambio, él despacha un delegado. A menudo este delegado es el Vicepresidente, pero a veces el VP no está disponible y el Presidente debe enviar a otra persona, como el Secretario de Estado o incluso la Primera Dama. Él no quiere "conectar" su autoridad delegada a una sola persona; podría delegar esta responsabilidad a cualquiera que sea capaz de ejecutar el protocolo internacional correcto.

El Presidente define de antemano qué responsabilidad se delegará (asistir al funeral), qué parámetros se aprobarán (condolencias, palabras amables) y qué valor espera obtener (buena voluntad). A continuación, asigna a una persona en particular esa responsabilidad delegada en "tiempo de ejecución" a medida que avanza el curso de su presidencia.

En la programación Escenario: a menudo se enfrenta a situaciones en las que necesita ejecutar una acción en particular, pero no sabe de antemano qué método, o incluso qué objeto, desea llamar para ejecutarlo.

Por ejemplo: un botón podría no saber qué objeto u objetos necesitan ser notificados. En lugar de conectar el botón a un objeto en particular, conectará el botón a un delegado y luego resolverá ese delegado a un método particular cuando se ejecute el programa.


La vinculación de eventos a los controladores de eventos suele ser su primera introducción a los delegados ... Es posible que ni siquiera sepa que los estaba usando porque el delegado está envuelto en la clase EventHandler.



Si le interesa ver cómo se usa el patrón Delegate en el código del mundo real, no busque más que Cocoa en Mac OS X. Cocoa es el juego de herramientas de interfaz de usuario preferido de Apple para programar bajo Mac OS X, y está codificado en Objective C. Es diseñado para que cada componente de UI se extienda por delegación en lugar de subclases u otros medios.

Para obtener más información, recomiendo consultar lo que Apple tiene que decir sobre los delegados here .


Tenía la misma pregunta que usted y fui a este sitio para obtener una respuesta.

Aparentemente, no lo entendí mejor a pesar de que hojeé los ejemplos en este hilo.

Encontré un gran uso para los delegados ahora que leo: http://www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx

Esto puede parecer más obvio para los nuevos usuarios porque Forms es mucho más complicado de pasar valores que los sitios web ASP.NET con POST / GET (QueryString).

Básicamente se define un delegado que toma "TextBox text " como parámetros.

// Formulario 1

// Class Property Definition public delegate void delPassData(TextBox text); // Click Handler private void btnSend_Click(object sender, System.EventArgs e) { Form2 frm= new Form2(); delPassData del=new delPassData(frm.funData); del(this.textBox1); frm.Show(); }

// RESUMEN: defina delegado, cree una instancia de la nueva clase Form2, asigne función funData () para delegar, pase su textBox al delegado. Muestra el formulario.

// Form2

public void passData(TextBox txtForm1) { label1.Text = txtForm1.Text; }

// RESUMEN: Simplemente tome TextBox txtForm1 como parámetros (como se define en su delegado) y asigne texto de etiqueta al texto de TextBox.

Espero que esto ilumine el uso de los delegados :) ..


Tenía un proyecto que usaba Win32 Python.

Debido a varias razones, algunos módulos usaron odbc.py para acceder al DB, y otros módulos - pyodbc.py.

Hubo un problema cuando una función debía ser utilizada por ambos tipos de módulos. Tenía un objeto de conexión pasado como argumento, pero luego tenía que saber si usar dbi.dbiDate o datetime para representar los tiempos.

Esto se debió a que odbc.py esperado, como valores en sentencias de SQL, data como dbi.dbiDate mientras que pyodbc.py esperaba valores de fecha y hora.

Una complicación adicional era que los objetos de conexión creados por odbc.py y pyodbc.py no permitían establecer campos adicionales.

Mi solución fue envolver los objetos de conexión devueltos por odbc.odbc (...) y pyodbc.pyodbc (...) por una clase de delegado, que contiene la función de representación de tiempo deseada como el valor de un campo adicional, y que delega todas las demás solicitudes de campo al objeto de conexión original.


Un uso común de los delegados para listas genéricas es a través de delegados de Acción (o su equivalente anónimo) para crear una operación foreach de una línea:

myList.Foreach( i => i.DoSomething());

También encuentro que el delegado Predicado es bastante útil para buscar o eliminar una Lista:

myList.FindAll( i => i.Name == "Bob"); myList.RemoveAll( i => i.Name == "Bob");

Sé que dijiste que no se requiere código, pero me resulta más fácil expresar su utilidad a través del código. :)