2012-12-28 1 views

Répondre

3

Je trouve très utile d'utiliser des méthodes anonymes pour éviter les variables globales

Sans méthodes anonymes:

private static Dictionary<Binding, ErrorProvider> dict = 
    new Dictionary<Binding, ErrorProvider>(); 

public static void ParseBinding(Binding binding) 
{ 

    var errorProvider = new ErrorProvider(); 

    dict.Add(binding, errorProvider); 

    binding.Parse += new ConvertEventHandler(binding_Parse); 

} 

static void binding_Parse(object sender, ConvertEventArgs e) 
{ 
    var binding = sender as Binding; 
    var errorProvider = dict[binding]; 

    try 
    { 
      // some validation form e.Value 
      // throws exception if not valid 
    } 
    catch (Exception ex) 
    { 
     errorProvider.SetError(binding.Control, ex.Message); 
    } 
} 

C'est vraiment dangereux, car je dois prendre soin de moi-même pour supprimer les entrées de le dictionnaire s'il n'est plus utilisé, sinon j'ai une fuite de mémoire puisque le garbage collector ne disposera jamais de la liaison ou du fournisseur d'erreur.

Maintenant, la mise en œuvre beaucoup plus simple avec des méthodes anonymes:

public static void ParseBinding(Binding binding) 
{ 
    var errorProvider = new ErrorProvider(); 

    binding.Parse += (sender, e) => 
     { 
      try 
      { 
       // some validation form e.Value 
       // throws exception if not valid 
      } 
      catch (Exception ex) 
      { 
       errorProvider.SetError(binding.Control, ex.Message); 
      } 
     }; 
} 
2

Lire MSDN: Anonymous Methods (C# Programming Guide):

Création de méthodes anonymes est essentiellement un moyen de passer un bloc de code comme paramètre de délégué. En utilisant des méthodes anonymes, vous réduisez le surdébit de codage dans en instanciant des délégués en éliminant le besoin de créer une méthode séparée .

Par exemple, en spécifiant un bloc de code à la place d'un délégué peut être utile dans une situation où avoir à créer une méthode peut sembler un inutile tête


Il est erreur pour avoir une instruction de saut, comme goto, break, ou continuer, à l'intérieur du bloc de méthode anonyme dont la cible est en dehors de le bloc. C'est aussi une erreur d'avoir une instruction de saut, comme goto, break, ou de continuer, en dehors du bloc de méthode anonyme dont la cible est à l'intérieur du bloc.

Une méthode anonyme ne peut pas accéder aux paramètres ref ou out d'une étendue externe .

Aucun code dangereux n'est accessible dans le bloc de méthode anonyme.

lu aussi Create Elegant Code with Anonymous Methods, Iterators, and Partial Classes

La méthode anonyme est définie en ligne et non en tant que méthode de membre de toute catégorie. En outre, il n'existe aucun moyen d'appliquer des attributs de méthode à une méthode anonyme, ni la méthode anonyme ne peut définir les types génériques ou ajouter des contraintes génériques.

1

peut être utile ...

http://www.dotnet-tricks.com/Tutorial/csharp/40ID180612-C-Sharp-Anonymous-Method.html

Il y a des inconvénients couple que tout en utilisant des méthodes anonymes. Tout d'abord, vous ne pouvez pas utiliser la fonctionnalité "Modifier et continuer" dans le débogueur Visual Studio. Non autorisé à effectuer une modification de la méthode ou de la méthode anonyme lors de l'exécution du code. Au lieu de cela, vous devez modifier votre code et redémarrer le débogueur. L'autre problème potentiel est que, en supposant que le code de la méthode anonyme doit être exécuté en réponse à plusieurs événements, certains développeurs peuvent se retrouver à copier et coller le code dans plusieurs endroits de leur application, ignorant ainsi la règle générale de réutilisation du code.

Questions connexes