Aprende y comprende los delegados de C # codificando | Sandor Maraczy | Skillshare

Velocidad de reproducción


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Aprende y comprende los delegados de C # codificando

teacher avatar Sandor Maraczy, Microsoft Certified Software Developer

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

9 lecciones (55min)
    • 1. ¿Qué es este curso?

      1:35
    • 2. ¿Qué es un delegado?

      4:12
    • 3. Crear un delegado personalizado en código

      5:12
    • 4. La duplicación de código está creciendo, un ejemplo sin usar delegados

      8:19
    • 5. Código de refactorización para usar delegado

      5:20
    • 6. Añadir varios delegados a la lista de invocaciones

      7:34
    • 7. Inferencia de delegados

      5:08
    • 8. Acción y acción de T

      8:50
    • 9. Func of T, TResult

      8:35
  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

48

Estudiantes

--

Proyectos

Acerca de esta clase

Comprende el propósito de usar delegados y comprueba qué tan poderosas pueden ser a través de ejemplos.

Los delegados son muy útiles en C#, pero el concepto detrás de los delegados podría ser difícil de entender, por lo que puede ser confuso para muchos desarrolladores de C#.

Seré tu guía a través de tu camino de aprendizaje de delegados, y te facilitaré que comprendas mis ejemplos construidos lógicamente.

Si te gusta mi curso, ¡por favor no dudes en dejar un comentario y tell qué quieres aprender a continuación!

Conoce a tu profesor(a)

Teacher Profile Image

Sandor Maraczy

Microsoft Certified Software Developer

Profesor(a)

Sandor Maraczy is a Microsoft Certified Software Developer. He became passionate about programming and automation in the beginning of college, where he studied Business Information Technology.

He first started to deal with programming in Java and C#, and he always felt, that he is interested in coding in more depth, so beside college he also improved himself at home. He found really good resources online, by a guy called John Sonmez, who inspired him. He learned to code step by step by actually doing it, so he could soon break into the field as a software developer.

He also helped a lot to hiss classmates at college, where he got a lot of compliments for the way he explains basic programming concepts.

Today he is also teaching online, because he believes, that throu... Ver perfil completo

Habilidades relacionadas

Tecnología Desarrollo web

Calificaciones de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%
Archivo de reseñas

En octubre de 2018, actualizamos nuestro sistema de reseñas para mejorar la forma en que recopilamos comentarios. A continuación, se muestran las reseñas escritas antes de esa actualización.

¿Por qué unirse a Skillshare?

Toma las galardonadas clases originales de Skillshare

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Toma clases sobre la marcha con la aplicación Skillshare. Transmite o descarga para verlas en el avión, el metro o donde aprendas mejor.

Transcripciones

1. ¿Qué es este curso?: Hola ahí. Conmutado el aprender y entender C delegados afilados por curso de codificación. Mi nombre es Chandler Morality. Ahora te muestras lo que aprendes en mi curso. Por qué debes aprender C delegados afilados. Delegate es una parte extremadamente importante fuera del framework darknet y se usan comúnmente estos después de un desarrollo, a veces puede ser la solución más fácil a tus problemas. Solo necesitas reconocer el escenario cuándo usarlo aprendiendo delegados, podrás escribir código más potente lo que permitirá una mejor reutilización de código de tu software. Los utilizará para eventos que sólo aclararé en el futuro. Secciones fuera del discurso y las usarás también indirectamente Van, por ejemplo, creando glink te consultas u operando con framework los cuales se basan en formar expresiones lambda . Al final de los puntajes, sabrás lo que es un delegado en los que están en el concepto detrás de él. Podrás crear y utilizar delegados y también entender el propósito cuando los delegados pueden ser útiles, lo cual demostraré a través de mis ejemplos lógicamente más grandes y útiles. Verás cómo los delegados pueden ayudarte a evitar la llamada duplicación en tu software y también cómo no violar el principio bruto abierto. Y al final, aclararé qué es una invocación una lista. Y Tom. pueden agregar múltiples delegados. Entonces vamos a saltar justo en ello y codificar conmigo para convertirnos en un maestro delegado. 2. ¿Qué es un delegado?: delegados en C Sharp es un concepto muy difícil de entender y puede ser confuso para muchos desarrolladores de C agudo. Esa es la razón por la que elegí este tema para dar una conexión informativa fuera que es saltar justo al tema. Asumo que eres tu familia son inicialización variable en C agudo. Pero vamos a dar un paso atrás a usted sólo por unos segundos. En el 1er 2 ejemplos, tenemos que valorar para actuar variables X, y es ejes terminados fuera de tipo int y estamos asignando seis para comer como valor. Está terminado está apagado, Taibu y simplemente le estamos asignando fuerza. Insertar caso. Tenemos una variable de buceo de referencia llamada O off type object, y en este caso estamos creando una nueva instancia fuera del tipo de objeto, y podemos hacer referencia a ese objeto a través de nuestro overable en el montón. Pero, ¿qué pasa si no quieres sostener ningún valor u objetos referenciados, pero queremos hacer referencia a los métodos, y eso nos va a llevar al concepto de puertas Terra porque ¿qué es un delegado? Básicamente, un delegado es un tipo en C agudo, y lo demostraría con un programa llamado I Spy. Esta es una forma fácil, cómo pudiste desmontar el código de vuelta al lenguaje intermedio o volver a C Sharp . Y después de construir el proyecto sencillo, abrí los binarios en I Spy y obtuve la siguiente salida, como se puede ver en la diapositiva. Por lo que en el primer caso en nuestro código C agudo, podemos ver nuestra declaración delegada es sólo una línea. Pero en el segundo caso, si sigo adelante y hablo esto demasiado mal a lenguaje intermedio, podemos ver que se genera una clase para nosotros detrás de bambalinas. Y esta clase se extiende más delegado dycus, y esa es la clase base aquí. Veamos qué, como puede ser un delegado delegado, es en realidad un puntero de función, y esto significa que somos capaces de hacer referencia a los métodos a través de nuestro delegado. Somos capaces de hacer referencia a la función hogareña matador caliente, y también somos capaces de referenciar las múltiples funciones o grupo de funciones también. También podemos pensar en un delegado como un ducto, muy puede simplemente volcar nuestros datos y podemos obtenerlos del punto A al punto B, y es muy importante mencionar que estos puntos pueden ser un punto totalmente diferente nuestra aplicación. Ahora veamos cómo funcionan los delegados personalizados en este sencillo ejemplo. Tenemos dos métodos estáticos. Todos devuelven vacío y todos toman parámetro string aquí. En el primer caso, tenemos el método lock to console, que simplemente escribe el mensaje fuera de la consola en el método de incendio bloqueado, bloqueado estaban registrando la cadena en su archivo. Podemos involucrar estos métodos uno tras otro sin utilizar delegados de manera muy simple con misma o incluso diferente entrada. Pero podemos invocar uno o ambos a través de un delegado, y para eso necesitamos la siguiente declaración delegada. Entonces esta es una declaración delegada, y como se puede ver, parece una declaración de método. Es muy sencillo. Necesitamos usar una palabra clave delegada aquí. Tenemos evitar el tiempo de retorno porque nos gustaría usar el candado para consola o el candado para disparar métodos años y ellos orator roid. Después sale el nombre del delegado, que será mi delegado más largo en este caso, y luego necesitamos escribir los parámetros D Valores de los métodos asignados fuera de curso. Necesitamos también una creación de instancia, lo que significa que necesitamos crear una nueva instancia fuera de este tipo de delegado. Estamos diciendo, mi delegado más largo, mi delegado es nuevo, mi delegado más largo y en los paréntesis necesitamos escribir un método, y ese método será el método Estamos haciendo referencia, también. Entonces donde mi variable delegado y podemos invocar su muy fácilmente como se menciona a través de nuestra variable mi delegado sin pasar Hola Vered La entrada de cadena. Podemos llamar al método de bloqueo a consola aquí y a este sencillo programa. Escribimos una sola línea en la consola la cual dice, Hola palabra y eso es todo. Es tan fácil definir un delegado personalizado. Ahora veamos cómo funciona en código. 3. Crea un delegado personalizado en código: Ahora veamos cómo definir el código de delegación acostumbrado. En este sencillo ejemplo, tenemos dos métodos estáticos, algunos sobre los métodos del tema aquí. Ambos toman dos ins como parámetro, y regresan y al resultado del cálculo. Por supuesto, no se sorprenderá si los estamos llamando directamente con, por ejemplo, cinco y cinco parámetros. Tendremos 10 llamando a algunos, y conseguiremos cero por Corning, sujeto como resultado. Entonces vamos a tratar de sonar sólo para hacer esta orilla. Entonces quiero decir, primero, llamar a algunas malas hierbas mencionadas cinco y cinco parámetros y en el Saab, engañado en cinco cinco parámetros aquí. Y dado que estos métodos regresan en entero debajo para escribir la línea derecha de la consola porque le gustaría ver el resultado de salida en la consola. Entonces es correcto porque todo ese derecho aterriza aquí muy rápido, y ahora disparamos sobre esto, podemos ver que nos dan 10 y cero como los suyos a solo esperarse. Pero, ¿qué pasa si no quiero llamar directamente a estos métodos? Pero quiero usar un delegado para el método porque esto también es muy fácil de hacer, y sucedió de la misma manera que hemos visto antes en la diapositiva. En primer lugar necesitamos delegar declaración cuarenta. Por lo que haré esta declaración primero aquí en este archivo y también aquí en el espacio de nombres, para que otras clases puedan usarlo también. A lo mejor más adelante. Y realmente lo hago aquí y escribe público. Necesitamos usar la palabra clave que a gate y escenas. Estos métodos regresan, y necesitamos escribir un final así como el tipo de retorno. Entonces necesitamos escribir el nombre de los delegados que será el delegado de proceso de números en este caso y luego los parámetros Aquí usan los métodos de referencia. Por lo que los métodos de referencia son estos algunos y el sur directamente quieren usar para delegación y toman dos enteros como parámetro. Por lo que necesitamos escribir. No lo hice Gracias en remolque. Yo también escucho. Entonces tenemos ahora nuestra declaración delegada, Pero para poder usar esto, también necesitamos instancia que se comió este tipo de delegado igual que es así en la diapositiva. Permítanme que primero me deshaga de esta invocación directa aquí. Por lo que eliminaría esto y me enjuagé, inicié nuevo objeto fuera de este tipo tu instancia Aquí te he llamado la Variable del y vamos a hacer esta secuela al proceso de nuevos números, delegado. Y ahora se puede ver que esto realmente toma un método como objetivo. Y este método necesita tener que ingresar parámetros y necesidad de volver y como los resultados. Ya que tenemos dos de estos métodos, podemos usar ya sea algunos o el sufrimiento. Pero intentemos eso para nosotros con algunos. Entonces escribo algunos aquí y se puede ver que cumple perfectamente para invocarlo. Tenemos que hacerlo. Él era nuestra voluntad de entrega, y vamos adelante e involucrados. Es variable. Sólo la vida. Él invocaría un método y pasaba el evento cinco, igual que teníamos antes. Por supuesto, tenemos que escribirlo también al cónsul, igual que lo escribimos antes. Y ahora un incendio en esto. Tendremos 10 también, igual que hemos conseguido antes. Porque en realidad, lo que necesitamos aquí es que creamos en ustedes delegamos aquí, y la instancia creó este delegado y a través de Dezell Variable, pudimos señalar a esto algún mensaje aquí. Por lo que al invocar ellos van y pasar en cinco y cinco parámetros apuntando a este método, podríamos simplemente y caminarlo. Y también somos capaces de cambiar esto, restar si se quiere simplemente modificando rápidamente algunos para restar aquí. Y ahora si corro así de bien, tú y te hace saber, como resultado, me di cuenta de que cuando estaba cambiando algunos para restar aquí, no estaba tocando esta invocación aquí. Por lo que pude hacer esto sin modificar la invocación. Vit los cinco y cinco parámetros. Y esto no es realmente útil todavía porque puedes hacer la pregunta de que ¿por qué no es suficiente que llamemos directamente a estos métodos aquí? ¿ Por qué necesitamos crear delegado aquí y gran instancia nueva e invocarlo a través de esta variable? Y eso es lo que vamos a cubrir a continuación. 4. La duplicación de código: un ejemplo sin usar delegados: Y ahora veamos cómo podemos hacer un uso real del delegado. Imaginemos que tenemos unos nuevos requisitos en lugar de simplemente caminar estos métodos a través de un delegado y rezar el resultado del consejo. Ahora queremos poder mirar los números, el nombre fuera, el método que estamos utilizando para nuestro cálculo y los resultados de cálculo a un archivo. Y también queremos que esto funcione para nuestras futuras funciones. Esto significa que si quiero agregar la función que multiplica o divide mis números, también necesito poder hacer esto de manera muy sencilla. Entonces veamos cómo funciona. En primer lugar, llamaré a esto sin usar al delegado. Entonces yo muy fábrica usar al delegado para ver lo flexible que puede ser nuestro código. Entonces empecemos esto creando una clase para nuestra función. Porque estos métodos son métodos relacionados con el cálculo. Tenemos que encapsular la disfuncionalidad aquí. Entonces vamos a crear mi clase de calculadora. Añadiré vidrio nuevo. Llamemos a esto mi calculadora aquí y en esta clase. Me gustaría deshilachar mis métodos relacionados con el cálculo desde el programa principal, así que realmente salto aquí rápidamente y basé estos métodos. Y también me desharé de la palabra clave de estudio aquí. Esto significa que para él fue estos métodos. Ahora necesitamos crear un nuevo objeto fuera de este tipo y en el programa principal. También tenemos aquí a nuestro delegado que aquí decoramos en este expediente. En primer lugar, también crearemos un nuevo cinco para ello. Por lo que menos caja, nuevos dioses de clase numeran aquí a los delegados de Croesus, y la clase se genera para nosotros automáticamente aquí. Pero tenemos que deshacernos de esto porque no necesitamos una clase aquí. No hay base aérea, este Doug una declaración a este expediente. Entonces veamos cómo funciona. Por lo que como se mencionó, necesitamos anotar los números, el nombre del método y el archivo de la razón del dedo del pie. Entonces cambiaré esto para no devolver X plus y, pero haré nueva variable fuera de tipo. Y mi real modificó su que yo era algunos Estos dos enteros y almacenar la variable de resultados . Ahora necesito declarar el nombre del método. Escribo loquero con el nombre y es bobo, algunos muy sencillamente y ahora una cabalgando con texto. Entonces eso es correcto. Texto de salida de cadena es igual a cadena formateada aquí. Entonces escribo String ese formato. Eso es correcto. El número uh cero uno de nombre de método es a y hacer Resultado es tres Ahora necesito montar las variables aquí Así escribo X e y parece estos son los números monto el nombre del método que puede ser el nombre del método y luego monto el resultado Ahora con el fin de mirar esto a cinco tienes razón archivo aquí Necesitamos usar tesis Tamayo espacio de nombre aquí y estamos usados los métodos upend o texto aquí cualquiera el pasado Primero en el bus será Oh mi c drive en los resultados para Inter Así voy a hacer frente rápidamente esto desde aquí y ahora nosotros escribe la ruta aquí cuando acabo copiar y vamos a crear un nuevo cinco para ello El nombre fuera razón que txt Y también necesitas escribir los contenidos aquí que realmente son texto de salida y ahora es el paso correcto simplemente devuelvo el resultado aquí con el fin de utilizar este idea involucró rápidamente este método Aquí tengo razón Mi calculadora auto geek era nuevo Mi calculadora ya que estos métodos son Inna encapsulados en este tipo aquí. Necesitamos crear una nueva instancia para usarlos. Estoy bien, Dios, que algunos para mí El mismo bar puede 3er vistas antes. Y ya que estos métodos regresan y tienes razón, armas? Muy bien, línea otra vez aquí. Ahora bien, si corro esto contigo y consigo 10 como hemos conseguido antes. Pero también tenemos un archivo de texto aquí. Si abro la pelea fiscal, puedo ver mi resultado de salida. El número es el nombre del método y el resultado también. ¿ Qué pasa si quiero usar esto también al método del sujeto? No sólo no sólo para dos, algún método. Para poder hacer esto, necesitamos volver a mi clase de calculadora muy rápido. Y necesitamos duplicar esta funcionalidad para tener un sujeto picaduras Desde estos archivos upend todo método de texto simplemente escribe las cadenas apple sin espacios en blanco o sin ninguna nueva línea. Ivy rápidamente modificó esto aquí a cadena que conquistó mueren justo fuera con texto y hacer una nueva línea después de eso. Entonces ahora sigamos adelante y creemos nuestro tema. Metal Justice mencionó buceo copiar pegar esto y llamemos a esto restar aquí y aquí también. Y hay una modificación más. Tenemos que sacar eso en lugar de sumar Exxon Vie vista Ahora di X menos y aquí y ahora si uso esto bien, va una polla de león derecha que restan cinco y cinco. Y corriendo me pondría 10 y cero justo antes de la justicia Ahora, si veo mis árboles Alberto que se puede ver que en la primera línea tenemos los números cinco y cinco, algunos con el resultado apagado 10 que cinco y cinco, los mismos parámetros. Y al restarlos, obtenemos cero como resultado. ¿ Pero fue el problema en esto? Y el problema es que cada vez que queremos crear algo funcional nuevo en la clase de mi calculadora aquí, necesitamos duplicar esto. Por ejemplo, si quieres otro mensaje, yo quiero jugar, necesitamos cambiar esto para multiplicar. Tenemos que hacer otra modificación aquí e Israel para decir x tiempo. Entonces escucho que estamos creciendo esta mi clase de calculadora. Esta es una muy mala práctica porque tenemos muchas duplicaciones fuera de los tribunales y también violamos el principio de cierre abierto. El principio de cierre abierto establece que se debe abrir una clase para extensiones pero cerrar para modificaciones. Esta clase no estará cerrada por modificaciones porque necesitamos seguir adelante y modificar la clase todo el tiempo aquí. Entonces vamos a su factor esto para usar delegados en su lugar. 5. Vuelve a codificar para usar un delegado: Y ahora vamos a factorizar la escuela para evitar la duplicación del núcleo. Aquí. También lo son algunos métodos. Aquí ahora tiene dos parámetros X e y y estamos codificando duro este X plus y aquí y estos X menos método abstracto y así sucesivamente y así sucesivamente. Y queremos evitar esto y para eso vamos a utilizar al delegado. Entonces en lugar de hacer esto, tendremos otro perímetro aquí y este parámetro de ustedes estará fuera de la puerta de Abdullah. Este será nuestro delegado de proceso de números que creamos antes y llamaremos a este del. Entonces queremos duro llamado esta X plus y aquí materiales dicen Del X e y entonces eso hará nuestro resultado aquí y diremos en lugar de codificar duro los algunos a través de nuestra variable del del. Tenemos una propiedad llamada Método off type método info y zapato que somos capaces de almacenar el nombre a través del nombre de la propiedad aquí. Entonces también tenemos nuestro nombre de método ahora, Así que vamos a ver cómo podemos usar esto si vas programa de método que CS puedes ver que este código no va a compilar porque ahora estamos llamando al método algunos con dos parámetros. Pero la materia sonora ahora tiene cierto paramilitarismo. Por lo que necesitamos seguir adelante y darle un objeto. Off type numbers procesan delegados. Entonces vamos a hacer un nuevo objeto aquí y necesitamos pasar en el Método V era antes. Pero como no tenemos un método, solo quiero seguir adelante y escribir algunos aquí y presionando control y punto, podemos generar un nuevo método aquí y este método se creará automáticamente para nosotros. Simplemente te deshaces de este lanzando nada plantado excepción. Y en este método, podemos seguir adelante y devolver el Sam fuera X e Y. Ahora, si ejecuto esto, se puede ver que tenemos el mismo resultado que hemos obtenido antes. Si voy al resultado que txt también hay la misma salida que hemos visto antes. Los números son cinco y cinco. El nombre del método es algunos y el resultado está hecho Así que básicamente no necesitamos código duro son funcionalidad en la clase mi calculadora en cualquiera fuera de estos métodos, podemos llamarlos a través del delegado así que en realidad, si quiero extender mi función derecha. Estos vets restan o se multiplican o cualquier otro método que tome dos enteros y devuelvan de Annan. Ya no necesito duplicar este tribunal aquí y extender este expediente. Puedo eliminar esto ahora, y simplemente puedo usar este método aquí con algunos importó lo que vamos a modificar ahora para procesar números aquí porque este método no sólo devuelve el resultado del cálculo, Entonces no solo estamos calculando, pero también mirando el fuera de gravado tu expediente. Esto sería un poco más conciso si utilizara una clase más larga para hacer esta funcionalidad de registro aquí solo para que sea simple. Yo lo creo aquí por ahora. Por lo que ahora nos gustaría ampliar nuestra funcionalidad con otros cálculos. Simplemente podemos volver al programa que CS y llamó a los números de proceso en otro delegado. Por lo que soy un rápido ir adelante y escribir tipo que los números de proceso. De verdad lo paso a cinco y cinco, y voy a pasar en un nuevo objeto fuera de este tipo de delegado, y voy a pasar el paseador de buzo no va a aplicar esta vez, así que por el momento no tenemos este asunto, pero rápidamente generé, tal como lo hemos visto antes. Y ahora estamos en condiciones de volver a la derecha la próxima vez. Entonces escucho. Entonces si ejecuto este programa, veremos que ahora obtenemos 10 y 25 como resultado y en nuestros resultados de salida Txt también obtienes cinco y cinco y 25 cuando estamos llamando a Multiplicar aquí. Entonces ahora podríamos seguir adelante y escribir la divide o la banda sonora El método dice, Bueno, al igual que el algunos y el método de multiplicar. Y podríamos escribirlo sin tocar esto mi proceso de calculadora, función numérica para que podamos extender nuestra funcionalidad fuera de este Mi calculadora Turquenos nosotros por no escribir y duplicar cancha aquí en la clase, sino en el lugar off invocación. Podemos escribir nuestros métodos de cálculo, y eso es lo que hace que nuestros llamados sean muy flexibles. 6. Agrega múltiples delegados a la lista de invocación: Ahora, veamos cómo podemos agregar múltiples delegados a nuestra lista de invocaciones. Tengo mi proyecto demo delegado abierto si estás trabajando en antes. Y extendí mi programa de vidrio con dos métodos estáticos aquí. uno se le llama Rights Impulse String on, derecha. Simplemente D mensaje de registro fuera de la consola de una manera sencilla. Y el otro se llama Bright Plants History aquí dentro y sube la cuerda en fantasía Espera al consejo. Ahora nos sobre los involucramos a través del delegado para esta pequeña demo. Simplemente comentamos se llama lo que hemos escrito antes tener un control de prensa plus k y ver aquí a discordia común. Fuera escribo bomba sombría la puerta vacío. Recuerdo a este lager delegados ya que usaremos esto para la tala y tendrá permiso de bomba o el mensaje de registro de cadenas aquí Ahora a ustedes. ¿ Fue dinero para ampliar esto fuera de curso? Simple. Unger te iguala a ti candado o delegados aquí. Una persona de uñas, ¿verdad? Símbolos beben Ahora copiaré pegar esto muy rápido Y déjame cambiar esto a fantasía. Yo voy aquí y cada persona la cuerda de fantasía correcta aquí. Como recuerdan, necesitamos invocar aquí las variables Tous. Pero por ahora realmente involucramos estas variables con el mismo parámetro de entrada de cadena. Por lo que derecha string lug mensaje igual que estamos anhelando consola hacer el consorcio Ok, Ahora entonces caminó diarrea simplemente a la derecha parece más largo pasar mensaje pulmón. Y voy a hacer esto con mi fantasía más tiempo también aquí. Entonces ahora si ejecuto este programa, conseguiremos Estamos buscando la consola escrita dos veces pero primero de una manera sencilla y luego de una manera lujosa aquí. Y como puedes ver, creamos dos instancias fuera de este tipo de delegado y a través de la simple más larga estaban apuntando a la cadena simple derecha a través de nuestra fantasía más larga Estamos apuntando al método de historia Vance correcto Pero cómo podemos invocar múltiples métodos a través de un solo delegado agregando los delegados a la lista de invocaciones? Y esto será muy fácil de hacer y cuatro días reales simplemente deshazte de nuestra invocación aquí y también del lujo de lujo creado aquí y ahora solo tenemos una estancia delegadora ella . Por lo que llamaré a este delegado más largo o lager Del, porque de ustedes sólo tienen una variable aquí y ahora, al decir más tiempo Del Plus equivale bien capaz de agregar nuevo delegado a nuestra lista de invocaciones. Escribo nuevo más largo, delegado y ahora estás pasando mi cuerda de fantasía derecha aquí. Y por supuesto, esto no hará nada. Ya que no invocamos a esta lager, van a variables caminata tan menos débil. Era un mensaje más largo ahora largo y ahora disparamos sobre esto. Saquaremos lo mismo que hemos conseguido antes. Entonces ahora lo que pasó es que sólo tenemos una lager. Ellos inicializarán aquí estamos señalando simple la cadena de entrada de derechos pero pudimos agregar un nuevo delegado que señala el método de cadena de fantasía correcto. Entonces a través de esta laggard variables a través de esta una variable estuvimos en caminar estos métodos uno tras otro aquí. Y si quiero invocar otro método, simplemente sigo adelante y escribo más tiempo. Del plus es igual a nuevo Delegado más largo y también puedo seguir adelante y escribir algo tonto aquí , como cadena derecha, leer, preguntar los riesgos simplemente yo generaría estos métodos aquí y ahora. Escribo string format zero y nuestro mensaje de registro, y todavía tenemos solo esta invocación variable aquí Esta delegando ubicación. Entonces déjame solo correr esto muy rápido. Ahora tengo tres métodos. Escuela a través de este fondo Invocación aquí. Entonces ese es el concepto básico detrás de la invocación. Honesto aquí. Pero déjenme mostrarles también cómo podemos eliminar a un delegado o en suscribirse, Suscribirse y darse de baja será importante. Peor cuando hablamos de eventos después. Por lo que responder, escribir o eliminar a un delegado es muy fácil. En cambio, off plus igual simplemente usaremos menos igual aquí seguro. Fue menor Secuelas para la cuerda de arroz con método Asterix Nuestra salida a ser será la 1ª 2 métodos causa también hay una cosa más importante no te he mostrado antes pero estoy seguro que sabrás cómo funciona esto Si sigo adelante y en lugar de explosiones igual, yo solo digo igual a nueva lager Delegado pelea Francis String y yo cambiaría esto a explosión igual a lo que será nuestra salida. Entonces déjame solo correr esto muy rápido aquí. Y como pueden ver, no estamos escribiendo la simple cadena de salida de la consola. Solo estamos escribiendo la cadena de fantasía y la cadena con asteriscos aquí porque En realidad, estamos creando nueva instancia fuera de este tipo de delegado blogger y estamos señalando la cadena de símbolo correcta en este momento. Pero en la siguiente línea estaban diciendo que esta lager que van variable equivale a un nuevo delegado más largo Andrea señaló de cuerda de fantasía derecha aquí. Por lo que ya no apuntas al método de flujo simple correcto sino al método de historia de Francia correcto y luego apuntando a este método en la siguiente línea, también estamos agregando a este delegado la lista de invocaciones. Por lo que estos dos métodos aquí derecho cuerda de fantasía y cuerda derecha con Asterix se sienten involucrados . 7. Delegar la inferencia de delegada: en esta conferencia, voy a presentar su concepto, que a veces puede ser confuso para principiantes, desarrolladores de C afilados. Y este concepto se llama inferencia delegada. Delegar inferencia es simplemente una gran característica que nos proporciona el compilador de C sharp y nos ahorraremos un poco fuera de cancha aquí. Entonces en nuestro ejemplo de delegado multicast, lo que teníamos antes creamos un delegado llamado delegado más largo aquí. Y hay que recordar podemos asignar métodos a este delegado los cuales devuelven vacío y toma parámetro string. Pero antes de que estuviéramos asignando múltiples delegados, la lista de invocación la primera grande la nueva instancia fuera de este más largo delegado tipo gold lager del, hemos escrito nuevo delegado más largo y estábamos señalando el método de cadena simple correcto. Entonces estábamos diciendo laggard más igual y otra vez necesitamos t. instancia se comió nueva delegada rezagada, que apuntaban a otro método aquí. Bueno, en este caso no es tan complejo cuando estamos viendo este ejemplo. Pero si vuelves a nuestra inicialización de mi calculadora aquí llamamos a este método de números de proceso y en el parámetro de búsqueda, necesitamos crear una nueva instancia de este tipo de delegado y luego apuntando al método algunos . Y en este punto, el mismo impuesto se volvió un poco más incómodo porque podemos como la pregunta que por qué necesitamos grande nueva instancia fuera de este tipo de delegado. Ya que sabemos exactamente que esta función de números de proceso tomará números delegador de procesos . Pero como queremos expresarnos por qué, según lo más fácil y sencillamente posible, el compilador C Sharp nos proporciona esta gran característica llamada Delegate en Francia. Entonces si miras este ejemplo una vez más, hago una nueva instancia fuera de este tipo de delegado más largo y tipo delegado en Francia hace posible que ya no necesite montar esto aquí, ya que el tipo se inferirá y esto significa que el compilador C sharp lo resolverá . Pero este tipo es y va a crear una nueva instancia fuera de ella detrás de bambalinas para nosotros. Entonces si solo sigo adelante y elimino esto aquí mismo, nuestro código será muy simple, er porque ahora no estamos diciendo que este rezago Alec fuera un nuevo delegado lager y luego apuntó la cadena de entrada de racks. Pero podemos seguir adelante y declarar rápidamente que estamos señalando este mensaje de cadena simple derecho aquí. Por lo que delegar inferencia significa que el compilador de incautaciones descubrirá el tipo de lo que necesita para crear una nueva instancia off. Y entonces también comprobaremos que el método escrito aquí sea comparable a esta declaración . Lo que tenemos aquí y ya que este derecho cadena simple es un método que toma una cadena y devuelve vacío. Es absolutamente perfecto para un compilador C agudo porque a través de este delegado delegado lager aquí podemos apuntar a estos tipos fuera de métodos. Por lo que ahora podemos seguir adelante y modificar rápidamente esta cancha también aquí. Eliminaré aquí a este delegado lager y podemos ver que nuestro frío combina perfectamente. Entonces ahora si alrededor de esto, se puede ver que obtenemos el mismo resultado que hemos conseguido antes. Entonces estamos en este momento solo centrándonos en esto se ponen cuerdas aquí y la consola y obtenemos esto. Tres son a decir que hemos llegado antes, porque primero estamos apuntando a la derecha, parecen cadena, y luego estamos agregando estos dos delegados que apuntan a otros métodos, y así se invocarán estos tres métodos. Entonces ahora seamos simplificados nuestra invocación aquí. También podemos hacer este Vidar números de proceso anteriores método causa también. Entonces ahora ya no necesitamos crear una nueva instancia aquí. Por lo que podemos simplemente deshacernos de esto aquí muy rápido y podemos pasar en algunos que hacen que nuestra corte aquí sea mucho más concisa y más fácil de leer. En comparación con este incómodo delegados en Texas realidad medio aquí. Ahora nos deshacemos de esto también y que vuelvas a ejecutar el programa solo para asegurarnos que obtenemos toda la funcionalidad que teníamos antes. Y como pueden ver, 10 y 25 están imprimiendo al cónsul. Y también tenemos estos textos de salida de árbol aquí. Entonces aquí tienes, delegado en Francia, el concepto que puede hacer que nuestro código sea más fácil de leer y más fácil de usar a hora de usar delegados 8. Acción y acción de T: Entonces en la última conferencia, hemos visto cómo el concepto fuera de la inferencia delegada puede simplificar nuestro código. Y en esta conferencia veremos cómo podemos hacer que nuestro código sea aún más sencillo usando los tipos de delegados integrados , acción y acción t en el framework dotnet solo para que sea sencillo y fácil de entender. Yo haría la demo en un nuevo proyecto, así que iría aquí en solución click Agregar nuevo proyecto, y llamaría a este delegado de acción y esta será una aplicación de consejo también. Y también hago esto como el inicio del proyecto aquí. Entonces solo me aseguro de que esto vaya a ejecutar este programa que estamos ejecutando. También me deshago de esto usando un año porque no usamos estos espacios de nombres en este momento. Y ahora veamos cómo usar al delegado de acción edificante. Entonces si recuerdas en sus ejemplos anteriores, necesitamos declarar primero a un delegado y luego instancia que se lo comió, y los métodos de signo al mismo. Entonces supongamos que ahora necesitamos declarar un delegado personalizado justo lo hicimos antes porque nos gustaría asignar métodos que no toman parámetro y devuelven vacío. Entonces sigamos adelante y rápidamente declaramos Delegado Personalizado. Al igual que en nuestro ejemplo anterior, adelante y escriba Delegado Público, Evite. Vamos a ir esta acción que una puerta y no va a tomar nada. Y para usarlo voy a seguir adelante y derecho Delegado de acción No igual. Y gracias a la inferencia delegada, solo podemos montar rápidamente el nombre del método. El nombre del método será Acción uno. Y recuerdas presionando punto de control, aquí podemos generar un método. Simplemente nos deshacemos rápidamente de esto aquí y de este método. Solo somos simples a la derecha. Acción uno se llama o acción uno se involucra. Entonces de verdad me pegué. Ves, nosotros constante en la línea correcta, ¿verdad? Acción uno se llama en vez fuera Del convertirse también llamar a esta acción aquí y ahora, Al invocar esta acción, veremos qué tenemos aquí. Nay, también correcto. Es la línea Cónsul Red aquí sólo para asegurarse de que al ejecutar el programa el avant cónsul desaparezca a menos que presionara enter. Entonces si ejecuto esto, veremos que obtenemos acción. Se llama a uno, pero no nos sorprenderá porque ya somos familia. O con esto tenemos amigos delegadores, y también declaró un delegado de costumbre al igual que lo hicimos antes. Pero si quieres tener la misma funcionalidad con la acción de construcción, ya no necesitamos declarar un delegado personalizado. Y esto también es muy fácil. El único que tenemos que hacer es que en lugar de escribir delegada acción, podemos escribir acción aquí y se puede ver esto es un delegado y es método encapsulado que no tiene parámetros y no devuelve un valor. Es bastante bueno para nosotros porque de hecho nuestra acción un método es perfectamente comparable a esto. Entonces somos calor, entrar y la acción correcta a o simplemente tiene la acción correcta. Lo que teníamos aquí en la línea anterior y yo sólo fui común esta línea fuera. Entonces llamo a esta acción y realmente asigno a nuestra acción un método que teníamos antes y ahora un incendio en este programa. ¿ Obtienes el mismo resultado cada uno de los que has conseguido antes? Y lo que no tenemos que hacer ahora es que no necesitamos esta declaración aquí, así que también puedo borrar esto aquí mismo y los que así deshacerse de esta línea fuera de curso Así que, como pueden ver a medida que vamos más allá, ahora nos estamos expresando incluso más simple y más simple ahora que quieren firmar otro método o tal vez tenía otro método a la invocación. Una lista que es ir adelante y escribir acción más igual a la acción correcta a Y podemos generar otro método. Podemos pasar en cualquier método que devuelva vacío y no tenga ningún parámetro aquí. Por lo que podemos escribir acción a estos oro aquí. Ahora estamos dirigiendo esto. Obtendremos t dos invocaciones de método lo que vimos antes y ahora puedes ver cómo esta acción nos puede ahorrar un poco de frío y ahora ya no necesitamos declarar el propio delegado personalizado . Pero, ¿cómo funciona la acción t? Entonces la acción off es la versión general fuera de la acción aquí y podemos usar action t siempre que tengamos un parámetro o más parámetros y el mensaje en sí también necesita Teoh return void. Entonces en este ejemplo, simplemente usamos la acción porque aquí no tenemos ningún parámetro. Pero seamos factorizados es tener un parámetro de cadena y luego podemos usar la acción fuera del y ver cómo funciona. Entonces dividamos estas cuerdas aquí en envidiar. ¿ Ves por qué estamos haciendo esto en un momento? Escribo texto de cadena y haré de este otro método es a través de tomar parámetro de cadena ni acción correcta a y simplemente con mazos de coordenadas aquí. Y lo haré en el otro método, Isabel. Por lo que esta será la acción uno más dext y solo para tener la misma funcionalidad, se llamará nuestro parámetro string. Entonces si yo alrededor del programa, obtendremos la misma salida. Apenas hemos visto sólo para hacerlo más simple y conciso aquí. Pero por el momento se puede ver que en realidad tenemos un error de compilador aquí. Y es porque nuestros métodos tienen ahora parámetro vom aquí. Y esta acción sólo es compatible con método que no tiene un parámetro y devuelve vacío . Y real correcto es mediante el uso de la pregunta general off action. El action off D. Así que ahora, debido a que tenemos el parámetro string, ahora necesitamos seguir adelante y escribir aquí el parámetro generate I, que será el tipo que tenga el parámetro. Entonces porque nuestro parámetro fiscal re string simplemente cadena derecha aquí y esta filmación que estamos usando una acción off string. Entonces estamos asignando métodos que tengan parámetros fuera de este tipo. En este caso, un parámetro fuera de este tipo y volvemos vacío. Y como puedes ver, combina a la perfección. Ahora, el único problema con este código es que para que la acción esté involucrada, necesitamos pasar aquí un parámetro de cadena, y se llamará a este parámetro. Ahora, si ejecuto esto, podemos ver que tenemos el mismo resultado lo que obtenemos antes y ahora se puede ver cómo acción y acción off D puede sustituir aquí a los delegados personalizados porque ya no necesitamos tener estos declaración aquí mismo. Podemos simplemente hacer esto en una línea y asignar el método también. 9. Func de T, TResult: Entonces después de nuestra acción y acción del ejemplo del té, sigamos adelante y veamos cómo funcionan los delegados de funciones. Yo creo el nuevo proyecto aquí llamado Funk Delegado. Hice esto mi inicio Un proyecto y también puse a métodos estáticos en este proyecto. Aquí tenemos convertir a wind one y convertir a en y están convirtiendo una cadena a un entero en diferentes formas. Tenemos que saber ¿qué es eso? En el primer caso, estamos devolviendo directamente el valor sin comprobar si la cadena se puede convertir o no Y esto puede arrojar una excepción. . Si el arroyo no se puede convertir, desgarro en peligro. En el segundo caso, estamos usando aquí los métodos de partes de la tribu. Y lo que esto hace es que primero verifique. Si esto fuera usted para convertir, se puede convertir a un entero y si puede ser, entonces la variable resultado, mantenemos su valor. Este signo de interrogación simplemente significa que si este estado era cierto, los medios devuelven el resultado. Ya que sabemos que si esto es cierto, entonces el valor a convertir se puede convertir en un entero, por lo que estamos seguros para devolver el resultado Si no, estamos devolviendo cero. Por lo que este código unos arrojaron excepción. Si el valor a la comodidad no se puede convertir a un entero ahora, si sabes cuáles son estos métodos tienen perímetro de cadena y también tienen un tipo de retorno, y el tipo de retorno está en este caso, y para estos métodos, nosotros no puede utilizar la acción o acción fuera de T más escenas para esos delegados. Sólo podemos asignar métodos que devuelvan el vacío. Y en este caso, tenemos métodos. Vamos a haber regresado donde tú y esto significa que necesitamos usar otro tipo de delegado incorporado , que es el resultado funk off TT. Si me parece escribir funk aquí, puede ver que tiene 17 sobrecargas. Y esto significa que, por ejemplo, si solo escribo un tipo aquí, entonces significará que podemos asignar métodos a este funk siempre y cuando no tengan un parámetro y devuelvan el tipo de que está pasado aquí. Si usé el segundo overlord, eso significará que el primer parámetro I es el tiempo que el primer parámetro necesita tener y el segundo es. Pero el método necesita regresar, y en este caso, hay que usar esta sobrecarga aquí, ya que tenemos que enviar un mensaje de eso. Toma un tipo una cadena y devuelven un entero. Entonces si sigo adelante y escribo String en Tier y llamemos a este convertidor funk, simplemente puedo hacer esto igual para convertir su portada dos en una, por ejemplo. Ahora bien, si quiero usar esto, simplemente puedo correcto convertidor, funk y pasando uno, por ejemplo. Y, por supuesto, necesitamos ver el regreso donde tan bien estaba la línea correcta de la consola aquí. Ahora un incendio en este programa. Obtienes uno como resultado, porque uno una cadena se puede ver convertirse. Pero si quiero convertir, por ejemplo a , entonces llegaremos a cuatro meses de excepción aquí porque quieres convertirlo directamente sin comprobar si es posible o no, y por lo tanto en este ejemplo, podemos usar el converso haciendo también. Eso es todo aquí. Entonces si firmas convertido en número, simplemente estás obteniendo cero como resultado, y no vamos a conseguir unas excepciones lanzadas aquí. Entonces eso es todo. Básicamente, lo único que debes recordar es que en los parámetros generales de tipo puedes escribir más parámetros. Pero por supuesto, el mensaje que asignaste a este delegado necesita tener los mismos parámetros. En este caso, necesitamos tener tres parámetros entrantes de cadena y von Return escriba un entero. Ahora que somos familia o con cómo funciona funk T t result, podemos saltar de nuevo a nuestro proyecto demo delegado aquí. Y voy a hacer esto como el proyecto de inicio. Y si solo vuelves a esto, quiero decir, cierra todos los documentos y solo abriré el programa que CS Y si vuelves a nuestro ejemplo, tenemos delegado aquí delegado más largo que devuelve vacío aquí para que podamos asignar métodos que tienen ah, parámetro string y a su vez void ¿Cómo se puede sustituir esto? De acuerdo con la conferencia anterior, simplemente podemos sustituir esto por acción off t. Así que estamos chequeando se utiliza a varios delegado y ahora obtenemos lager. Ellos lo van Estaba bien. Cadena simple. Entonces para simplificar esto, simplemente podemos corregir la acción fuera de cadena parece correcto. Cadena simple y los otros métodos aquí también Tome una cadena y devuelva vacío. Se compilará perfectamente. Y ahora también podemos deshacernos de esta línea fuera de cancha aquí. Y si echan un vistazo a esto llamado ese Dios, ese proceso números mensaje aquí en el perímetro de búsqueda. Tenemos que pasar. Delegado proceso de números, delegado. Y estos números procesan Delegado se declara en esta clase aquí. ¿ Cómo podemos deshacernos de esto? Y ahora que sabemos cómo funciona el funk Off t, simplemente podemos ver que Oh, tiene un tipo de retorno off int y tiene que en parámetros. Si tiene un tiempo de retorno, necesitamos usar un funk. Por lo que volvemos a nuestra clase de calculadora solo por un momento. Y ahora aquí, en lugar de decir necesitamos un video delegado de proceso de números, simplemente di que necesitas una función que tenga que entrar en parámetros y tener un tipo de giro de entrada , y ese será nuestro proceso funk, , por ejemplo. Y si vuelves al programa que C s, podemos ver que esta cancha cumple perfectamente. Y ahora ya no estamos usando este delegado de proceso de números aquí, Así que simplemente podemos seguir adelante y deshacernos de esta clase. Por lo que eliminaré este año muy rápido y ahora se puede ver que no sólo tenemos dos clases en este proyecto demo delegado. Y como ahora es mi proyecto de inicio, simplemente puedo seguir adelante y comerme un cinco para ejecutar este programa. Y ahora se puede ver que obtenemos el mismo resultado que hemos conseguido antes. Y su código puede ser aún más sencillo porque no necesitamos que Teoh declare ninguno de los delegados aquí. Y también hay otra cosa que necesitamos notar que nuestra corte no sólo se volvió más sencilla , sino también. Si sigo adelante y llevo a mi cursador a estos números de proceso ahora, podemos ver que este método necesita tener dos enteros y la función y a partir de esta función, discapacidad y función delegada, ahora podemos ver que De acuerdo, necesito pasar un método que tenga dos enteros y retornos y terminar en nuestro ejemplo anterior . Cuando usamos el delegado de proceso de números, no pudimos averiguar esto y necesitábamos volver a esta clase de delegado de proceso de números y ver la decoración del delegado. Y creo que esto también puede ser muy dañino. Muchas veces cuando se tiene uso de delegado complejo al desarrollar software