Delegados y Eventos en C# - Blog de David Alonso. Microsoft SharePoint, Office 365, Azure y otras tecnologías Microsoft

Blog de David Alonso. Microsoft SharePoint, Office 365, Azure y otras tecnologías Microsoft

Microsoft SharePoint, Azure, Office 365

jueves, 29 de septiembre de 2016

Delegados y Eventos en C#

Hace poco un compañero de trabajo me preguntaba que era un Delegado en .NET.

Le remití a la referencia de la msdn: https://msdn.microsoft.com/es-es/library/17sde2xt(v=vs.80).aspx , pero al poco me dijo que estaba igual que si no hubiera leido nada, incluso yo le di la razón.  Decidí explicarselo con un ejemplo.

Segun la msdn, un delegado equivale a un puntero a una funcion con seguridad o a una devolucion de una llamada. Resumiendo. Un delegado no es mas que un apuntador a un método de una clase.

Con un ejemplo sacado de: https://msdn.microsoft.com/en-us/library/system.delegate(v=vs.110).aspx,

using System;
public class SamplesDelegate  {

   // Declares a delegate for a method that takes in an int and returns a String.
   public delegate String myMethodDelegate( int myInt );

   // Defines some methods to which the delegate can point.
   public class mySampleClass  {

      // Defines an instance method.
      public String myStringMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "positive" );
         if ( myInt < 0 )
            return( "negative" );
         return ( "zero" );
      }

      // Defines a static method.
      public static String mySignMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "+" );
         if ( myInt < 0 )
            return( "-" );
         return ( "" );
      }
   }

   public static void Main()  {

      // Creates one delegate for each method. For the instance method, an
      // instance (mySC) must be supplied. For the static method, use the
      // class name.
      mySampleClass mySC = new mySampleClass();
      myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
      myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );

      // Invokes the delegates.
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
   }

}


En el ejemplo se declara el delegado  amyMethodDelegate  y se peude ver que la clase mySampleClass  tiene dos metedos que coinciden con el prototipo del delegado.

A continuación en el main se crea un delegado para cada uno de los metodos, pasandole como parametro el nombre del metodo en concreto.


Esto quiere decir que myD1 sera un delegado al metodo myStringMethod  y myD2 al metodo mySampleClass

Mas información: https://msdn.microsoft.com/es-es/library/ms173172.aspx



No hay comentarios:

Publicar un comentario