Con esta propiedad de delegados puede crear una lista de invocaci\u00f3n de m\u00e9todos

Con esta propiedad de delegados puede crear una lista

This preview shows page 124 - 127 out of 146 pages.

Con esta propiedad de delegados, puede crear una lista de invocación de métodos a los que se llamará cuando se invoque a un delegado. Esto se llama multidifusión de un delegado. El siguiente programa demuestra la multidifusión de un delegado: using System ; delegate int NumberChanger ( int n ); namespace DelegateAppl { class TestDelegate { static int num = 10 ; public static int AddNum ( int p ) { num += p ; return num ; } public static int MultNum ( int q ) { num *= q ; return num ; } public static int getNum () { return num ; } static void Main ( string [] args ) { //create delegate instances NumberChanger nc ; NumberChanger nc1 = new NumberChanger ( AddNum ); NumberChanger nc2 = new NumberChanger ( MultNum ); nc = nc1 ; nc += nc2 ; //calling multicast nc ( 5 ); Console . WriteLine ( "Value of Num: {0}" , getNum ()); Console . ReadKey (); } }
Image of page 124
} Cuando el código anterior se compila y ejecuta, produce el siguiente resultado: Value of Num: 75 Usar delegados El siguiente ejemplo demuestra el uso de delegado. El delegado printString se puede utilizar para hacer referencia al método que toma una cadena como entrada y no devuelve nada. Usamos este delegado para llamar a dos métodos, el primero imprime la cadena en la consola y el segundo la imprime en un archivo: using System ; using System . IO ; namespace DelegateAppl { class PrintString { static FileStream fs ; static StreamWriter sw ; // delegate declaration public delegate void printString ( string s ); // this method prints to the console public static void WriteToScreen ( string str ) { Console . WriteLine ( "The String is: {0}" , str ); } //this method prints to a file public static void WriteToFile ( string s ) { fs = new FileStream ( "c:\\message.txt" , FileMode . Append , FileAccess . Write ); sw = new StreamWriter ( fs ); sw . WriteLine ( s ); sw . Flush (); sw . Close (); fs . Close (); } // this method takes the delegate as parameter and uses it to // call the methods as required public static void sendString ( printString ps ) { ps ( "Hello World" ); } static void Main ( string [] args ) { printString ps1 = new printString ( WriteToScreen ); printString ps2 = new printString ( WriteToFile );
Image of page 125
sendString ( ps1 ); sendString ( ps2 ); Console . ReadKey (); } } } Cuando el código anterior se compila y ejecuta, produce el siguiente resultado: The String is: Hello World C # - Eventos Los eventos son acciones del usuario, como presionar teclas, clics, movimientos del mouse, etc., o alguna ocurrencia, como notificaciones generadas por el sistema. Las aplicaciones deben responder a los eventos cuando ocurren. Por ejemplo, interrumpe. Los eventos se utilizan para la comunicación entre procesos. Usar delegados con eventos Los eventos se declaran y se generan en una clase y se asocian con los controladores de eventos utilizando delegados dentro de la misma clase o alguna otra clase. La clase que contiene el evento se usa para publicar el evento. Esto se llama la clase publicador . Alguna otra clase que acepta este evento se llama clase de suscriptor . Los eventos usan el modelo editor- suscriptor .
Image of page 126
Image of page 127

You've reached the end of your free preview.

Want to read all 146 pages?

  • Spring '15
  • Microsoft Visual Studio, Programación orientada a objetos, Lenguaje de programación, Compilador, Espacio de nombres, Entorno de desarrollo integrado

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern

Stuck? We have tutors online 24/7 who can help you get unstuck.
A+ icon
Ask Expert Tutors You can ask You can ask You can ask (will expire )
Answers in as fast as 15 minutes