Sdílet prostřednictvím


Anonymní funkce (Průvodce programováním v C#)

Anonymní funkce je "vložené" prohlášení nebo výraz, který lze použít všude, kde je očekáván typ delegáta.Můžete ji k inicializaci pojmenovaný delegát nebo předat místo pojmenovaný delegát typu jako parametr metody.

Existují dva druhy anonymní funkce, které jsou jednotlivě popsány v následujících tématech:

Vývoj Delegáti v jazyce C#

V C# 1.0 vytvořit instanci delegáta pomocí explicitní inicializaci s metodou, která byla definována jinde v kódu.C# 2.0 představil koncept anonymní metody jako způsob zápisu nepojmenované vložený příkaz bloky, které mohou být provedeny v vyvolání delegáta.C# 3.0 zavedla lambda výrazy, které jsou obdobou anonymní metody, ale výrazové a výstižné.Tyto dvě funkce jsou souhrnně označované jako anonymní funkce.Obecně, aplikace, cílová verze 3.5 a novější .NET Framework by měl použít lambda výrazy.

Následující příklad ukazuje vývoj vytváření delegáta z C# 1.0 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.
 */

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Příkazy, výrazy a operátory (Průvodce programováním v C#)

Výrazy Lambda (Průvodce programováním v C#)

Delegáti (Průvodce programováním v C#)

Koncepty

Stromy výrazů (C# a Visual Basic)