2011-05-15 2 views
9

Est-ce que quelqu'un pourrait expliquer ce que les méthodes anonymes sont en C# (en termes simplistes) et fournir des exemples possibles s'il vous plaîtQuelles sont les méthodes anonymes en C#?

+1

Vous pouvez trouver les réponses ici utiles: http://stackoverflow.com/questions/208381/whats-the-difference-between-anonymous-methods-c-2-0-and-lambda-expressions –

Répondre

19

Des méthodes anonymes ont été introduites dans C# 2 pour créer des instances déléguées sans avoir à écrire une méthode séparée. Ils peuvent capturer variables locales dans la méthode englobante, ce qui en fait une forme fermeture.

Une méthode anonyme ressemble à quelque chose comme:

delegate (int x) { return x * 2; } 

et doit être converti en un type délégué spécifique, par exemple via la cession:

Func<int, int> foo = delegate (int x) { return x * 2; }; 

... ou abonnez-vous un gestionnaire d'événements:

button.Click += delegate (object sender, EventArgs e) { 
    // React here 
}; 

Pour plus d'informations, voir:

Notez que les expressions lamdba en C# 3 ont presque méthodes anonymes complètement remplacé (même si elles sont encore tout à fait valable bien sûr). Les méthodes anonymes et expressions lambda sont collectivement décrites comme fonctions anonymes.

+0

Il est également utile d'ajouter que les méthodes anonymes existent dans la portée locale, ce qui signifie qu'elles ne peuvent pas être partagées ailleurs dans le programme ni exposer l'ensemble. Si vous avez besoin de réutiliser le code, vous devez écrire une méthode dédiée qui peut être appelée. – Damian

+0

@Damian: Je ne pense pas que ça vaille la peine d'appeler ça - je ne me souviens pas que ça soit apparu comme quelque chose que quelqu'un a * voulu * faire (contrairement aux types anonymes *). Je pense que c'est évident à cause de la syntaxe. –

5

Une méthode anonyme est un bloc de code qui est utilisé où une méthode serait généralement nécessaire et qui n'a pas de nom (donc anonyme).

MSDN a examples of using anonymous methods.

+0

de sorte que vous feriez pas besoin de créer une classe alors? Et je suppose que la méthode peut être appelée à partir de toute autre méthode? – James

+0

@James - Non, vous n'avez pas besoin de créer une classe pour contenir la méthode anonyme. La méthode peut être appelée à partir de n'importe quel endroit où elle a été transmise - vous ne pouvez pas l'appeler à une date ultérieure sans y faire référence - elle est anonyme. –

+1

Merci, pouvez-vous spécifier un cas où une méthode anonyme pourrait être nécessaire? – James

10

méthode anonyme est la méthode qui ne fonctionne tout simplement pas le nom et cette méthode est déclarée en place, par exemple:

Button myButton = new Button(); 
myButton .Click += 
delegate 
{ 
    MessageBox.Show("Hello from anonymous method!"); 
}; 
+0

Est-ce implicitement une action? Si je voudrais l'assigner à une variable, puis ajouter la variable à myButton.Click, je devrais utiliser EventHandler pour le type de variable même s'il n'utilise pas les paramètres. –

4

Ce sont des méthodes sans nom.

Par exemple, la méthode ordinaire est:

public void Foo() 
{ 
    Console.WriteLine("hello"); 
} 

Bien que la méthode anonyme peut être:

myList.ForEach(item => Console.WriteLine("Current item: " + item)); 

Le code intérieur du ForEach est en fait une méthode, mais n'a pas de nom et vous ne pouvez pas appeler de l'extérieur.

+4

Ce n'est pas une méthode anonyme - c'est une expression de lamdba. Les expressions lambda et les méthodes anonymes sont collectivement appelées fonctions anonymes. –

+0

Merci @Jon je voulais juste coller avec des mots simples par la demande OP "en termes simplistes". Salutations pour 300K! ;) –

Questions connexes