Anonymní metody (Příručka programování C#)
Ve verzích jazyka C# 2.0 jediným způsobem, jak deklarovat před Delegovat bylo použití s názvem metody.C# 2.0 zavedena anonymní metody a C# 3.0 a novější, lambda výrazy nepřeskakujte anonymní metody jako preferovaný způsob vložený kód.Informace v tomto tématu anonymní metody však také platí pro lambda výrazů.Existuje jeden případ, v němž anonymní metody poskytuje funkce nebyla nalezena v lambda výrazů.Anonymní metody umožňují vynechat seznam parametrů.To znamená, že anonymní metody lze převést na různé podpisy delegátů.Není možné s lambda výrazů.Další informace o lambda výrazy výslovně naleznete Lambda výrazy (Příručka programování C#).
Vytvoření anonymní metody je v podstatě předat blok kódu jako parametr delegáta.Zde jsou dva příklady:
// Create a handler for a click event.
button1.Click += delegate(System.Object o, System.EventArgs e)
{ System.Windows.Forms.MessageBox.Show("Click!"); };
// Create a delegate.
delegate void Del(int x);
// Instantiate the delegate using an anonymous method.
Del d = delegate(int k) { /* ... */ };
Anonymní metody pomocí snížit, režie kódování v konkretizaci delegáty, protože není nutné vytvářet zvláštní metody.
Například blok kódu namísto delegát může být užitečné v situaci, když museli vytvořit metodu určení může zdát zbytečnému zatížení.Dobrým příkladem je při spuštění nového vlákna.Tato třída vytvoří vlákno a také obsahuje kód, který podproces spuštěn bez vytvoření další metodu pro delegáta.
void StartThread()
{
System.Threading.Thread t1 = new System.Threading.Thread
(delegate()
{
System.Console.Write("Hello, ");
System.Console.WriteLine("World!");
});
t1.Start();
}
Poznámky
Rozsah parametry anonymní metody je anonymní metody blok.
Chyba mít prohlášení odkazů, jako je goto, Konec, nebo pokračovat v, uvnitř bloku anonymní metody, pokud je cíl mimo blok.Je také chyba mít prohlášení odkazů, například goto, break, nebo continue, mimo blok anonymní metody, pokud je cíl uvnitř bloku.
Místní proměnné a parametry, jehož rozsah obsahuje deklaraci anonymní metody se nazývají vnější proměnné anonymní metody.Například v následujícím kódu segmentu n je vnější proměnné:
int n = 0;
Del d = delegate() { System.Console.WriteLine("Copy #:{0}", ++n); };
Odkaz na proměnnou vnější n je sebraných vytvoření delegáta.Na rozdíl od místních proměnných životnost zachycené proměnnou rozšiřuje dokud delegátů, které odkazují na anonymní metody jsou způsobilé pro úklid.
Anonymní metody nelze získat přístup ref nebo mimo parametry vnější obor.
Žádný nebezpečný kód lze získat přístup v rámci anonymní metody blok.
Anonymní metody nejsou povoleny na levé straně je operátor.
Příklad
Následující příklad ukazuje konkretizaci delegát dvěma způsoby:
Přidružování delegát anonymní metody.
Přidružování delegát pojmenovanou metodu (DoWork).
V každém případě se zobrazí zpráva při delegáta.
// Declare a delegate.
delegate void Printer(string s);
class TestClass
{
static void Main()
{
// Instatiate the delegate type using an anonymous method.
Printer p = delegate(string j)
{
System.Console.WriteLine(j);
};
// Results from the anonymous delegate call.
p("The delegate using the anonymous method is called.");
// The delegate instantiation using a named method "DoWork".
p = new Printer(TestClass.DoWork);
// Results from the old style delegate call.
p("The delegate using the named method is called.");
}
// The method associated with the named delegate.
static void DoWork(string k)
{
System.Console.WriteLine(k);
}
}
/* Output:
The delegate using the anonymous method is called.
The delegate using the named method is called.
*/
Viz také
Referenční dokumentace
Delegáti (Příručka programování C#)
Lambda výrazy (Příručka programování C#)
Nebezpečný kód a ukazatele (Příručka programování C#)
Metody (Příručka programování C#)
Delegáti s název vs. Anonymní metody (Příručka programování C#)