Funciones anónimas (Guía de programación de C#)Anonymous Functions (C# Programming Guide)

Una función anónima es una instrucción o expresión "alineada" que se puede usar siempre que se espera un tipo delegado.An anonymous function is an "inline" statement or expression that can be used wherever a delegate type is expected. Se puede usar para inicializar un delegado con nombre o se puede pasar como un parámetro de método en lugar de un tipo delegado con nombre.You can use it to initialize a named delegate or pass it instead of a named delegate type as a method parameter.

Hay dos tipos de funciones anónimas, que se describen por separado en los temas siguientes:There are two kinds of anonymous functions, which are discussed individually in the following topics:

La evolución de los delegados en C#The Evolution of Delegates in C#

En C# 1.0, una instancia de un delegado se creaba al inicializarla de forma explícita con un método que se definía en otro lugar en el código.In C# 1.0, you created an instance of a delegate by explicitly initializing it with a method that was defined elsewhere in the code. C# 2.0 introdujo el concepto de métodos anónimos como una manera de escribir bloques de instrucciones insertados sin nombre que se podían ejecutar en la invocación de un delegado.C# 2.0 introduced the concept of anonymous methods as a way to write unnamed inline statement blocks that can be executed in a delegate invocation. C# 3.0 introdujo las expresiones lambda, que son similares en concepto a los métodos anónimos, pero más expresivas y concisas.C# 3.0 introduced lambda expressions, which are similar in concept to anonymous methods but more expressive and concise. Estas dos características se conocen colectivamente como funciones anónimas.These two features are known collectively as anonymous functions. En general, las aplicaciones destinadas a la versión 3.5 y posteriores de .NET Framework.NET Framework deberían usar expresiones lambda.In general, applications that target version 3.5 and later of the .NET Framework.NET Framework should use lambda expressions.

En el ejemplo siguiente se muestra la evolución de la creación de delegados desde C# 1.0 a C# 3.0:The following example demonstrates the evolution of delegate creation from C# 1.0 to C# 3.0:

class Test
{
    delegate void TestDelegate(string s);
    static void M(string s)
    {
        Console.WriteLine(s);
    }

    static void Main(string[] args)
    {
        // Original delegate syntax required 
        // initialization with a named method.
        TestDelegate testDelA = new TestDelegate(M);

        // C# 2.0: A delegate can be initialized with
        // inline code, called an "anonymous method." This
        // method takes a string as an input parameter.
        TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };

        // C# 3.0. A delegate can be initialized with
        // a lambda expression. The lambda also takes a string
        // as an input parameter (x). The type of x is inferred by the compiler.
        TestDelegate testDelC = (x) => { Console.WriteLine(x); };

        // Invoke the delegates.
        testDelA("Hello. My name is M and I write lines.");
        testDelB("That's nothing. I'm anonymous and ");
        testDelC("I'm a famous author.");

        // Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Hello. My name is M and I write lines.
    That's nothing. I'm anonymous and
    I'm a famous author.
    Press any key to exit.
 */

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee Also

Instrucciones, expresiones y operadoresStatements, Expressions, and Operators
Expresiones lambdaLambda Expressions
DelegadosDelegates
Árboles de expresiónExpression Trees