Métodos anónimos en C# 2.0

Estoy seguro que usted recordará su primera clase de programación donde le enseñaron la manera de crear métodos e invocarlos. Pues bien, estos métodos que usted aprendió tienen una sintaxis que hacen prosible la invocación como la especificación de cierto parámetros para este. Por ejemplo:
public void miMetodo(int nro)  {
    Console.Write("’{0}’ ", (char)nro);
    Console.Write("0x{0:X} ", nro);
    Console.Write("{0} ", nro);
}

Hasta ahora todo es muy conocido. Hemos creado un método llamado miMetodo seguido de un parámetro  entero para este. La manera de invocarlo usando un delegado es muy fácil , y eso lo sabe usted bien. Bueno, así como existe este método con nombre, también existe los recien conocidos Métodos Anónimos, que viene con C# 2.0 como parte de una de sus novedades de programación. Pues usted se preguntará ¿y que és un método anónimo?  un método anónimo es justamente eso, aquel método que no tiene un nombre específico. Y ahora usted se preguntará ¿y cómo invoco los método anónimos?, pues buena pregunta, la respuesta es usando Delegados.

El detalle es que siempre hemos estado acostumbrados a nombrar las métodos, tanto aquellos que devuelven valores nulos o los que devuelven un cierto valor para su posterior uso, y esta novedad de Métodos anónimos en C# 2.0, viene a ser el tema de este post. Es por eso que paso a explicar lo concerniente a Métodos Anónimos usando Delegados.

Lo importante es que los métodos anónimos,  reduce la sobrecarga de codificación al crear instancias de delegados sin tener que crear un método independiente. Un método anónimo es declarado con la palabra clave delegate seguido de una lista de parámetros. Las líneas de código para el método están dentro del par de llaves {}. Todo esto debe ser referenciado por un tipo delegate que tenga la misma firma que el método anónimo, es así que, la invocación de los métodos anónimos se realiza usando esta referencia. Vayamos con un ejemplo:

Lo primero que se debe hacer  es declarar el delegado.

delegate void toString(Boolean b);

En esta función, debemos instanciar el delegado correspondiente e invocarlo.

static void Main(string[] args)
{
    //referenciamos un delegate de tipo arriba definido.
    toString ts;
    //declaramos un método anónimo usando delegado.

    ts = delegate(Boolean b) { Console.WriteLine("\ntoString: {0}", b == true ? "Verdadero" : "Falso"); };
    ts(true); //invocación del método anónimo usando delegado.

}

De esta manera  explotaremos la nueva funcionalidad de los métodos anónimos. Para entender mejor aquí algunos ejemplos más. He aquí otra demostración. Ya sabéis lo que se hace primero:

delegate void printIntView(int valor);

Ahora se debe instanciar los delegados y los métodos anónimos. Esto es explicado dentro de las siguientes líneas de código.

static void Main(string[] args)
{
    //creamos los delegados a partir de tipo definido printIntView
    printIntView entero, hexa, oChar, EHC,HC, EC;

    //otros métodos anónimos
    entero=delegate(int nro) { System.Console.Write("’{0}’ ", (char)nro); };
    hexa = delegate(int nro) { System.Console.Write("0x{0:X} ", nro); };
    oChar = delegate(int nro) { System.Console.Write("{0} ", nro); };

    Console.Write("\nentero: "); entero(128);
    Console.Write("\n  hexa: "); hexa(128);
    Console.Write("\nChar: "); oChar(128);

    EHC = entero + hexa + oChar; // callbacks
    Console.Write("\nEHC: "); 
    EHC(128);//invocación
    HC= EHC - entero;
    Console.Write("\nHC: "); 
    HC(128);//invocación

    EC = EHC - hexa;
    Console.Write("\nEC: "); 
    HC(128); //invocación

    Console.ReadLine();
}

Ya sabéis esto de los métodos anónimos, y espero que nuevamente este post sea de utilidad.

más información : http://msdn2.microsoft.com/es-es/library/0yw3tz5k.aspx

Percy Reyes.

Published 6/2/2007 19:10 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2007/02/06/m-eacute-todos-an-oacute-nimos-en-c-2-0.aspx

Comentarios

# re: Métodos anónimos en C# 2.0

Ojito con los problemas de rendimiento al usar esta tecnica. Sin saberlo con certeza, la experiencia me demuestra que un metodo anonimo dentro de un bucle crea una perdida de rendimiento increible.

Como anecdota, decir qeu Miguel de Icaza implemento los metodos anonimos para el compilador de MONO en un viaje de EEUU a España, durante el vuelo.

Saludos

Wednesday, February 07, 2007 8:09 AM por Neu

# re: Métodos anónimos en C# 2.0

claro, es porque todo el método debe crearse y ejecutarse al instante... :)

a carambas!, Miguel Icaza implementando los métodos anónimos para el compilador MONO ??, eso es muy interesante :).. por cierto, sabes si hasta que punto está avanzado ese proyecto ??...

Percy Reyes.

Thursday, February 08, 2007 1:15 PM por Percy Reyes