Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Fathi Bellahcene

.Net m'a tuer!

Appeler des méthodes en ignorant la casse? c’est possible!

 

Je préfère le dire de suite, ce post à pour seul objectif de s’amuser en codant et il est fort peu probable de retrouver ces lignes de code en production Sourire

Ca fait un bout de temps que je regarde la possibilité d’utiliser les classes dynamiques arrivés depuis C# 4 et franchement, mon esprit ne trouve que des exemples qui n’ont pas grand intérêt.

Du coup, j’en profite pour partager avec vous mes délires de programmeur du jeudi soir en vous montrant ce qu’il est possible de faire avec ces objets.

Un truc chiant lorsque l’on utilise des objets dynamic, c’est que l’on perd l’auto-completion, du coup on est sensible à la case…et ca devient vraiment pénible, je me suis alors demandé si il n’est pas possible de résoudre ce problème…et bien figurer vous que j’ai trouvé!

Je vous montre d’abord le résultat Sourire

J’ai une classe Test qui implémente une UNIQUE méthode dummy:

   1:   public string DummyMethod()
   2:  { 
   3:         return "Dummy!";
   4:   }
et j’exécute le code suivant:
   1:   Console.WriteLine(t.dummymethod());
   2:   Console.WriteLine(t.dummyMetHoD());
   3:   Console.ReadKey();
J’obtient le résultat suivant!
image

Comment j’ai fait? très simple, il suffit de jeter un œil sur la classe System.Dynamic.DynamicObject.

On y trouve entre autre les méthodes (aux nom explicites ) virtuelles suivantes:

  • TryGetMember/TrySetMember
  • TryInvoke
  • TryInvokeMember

Pour rendre mes appelles case sensitive, il me suffit donc de modifier le code au moment ou il tente d’invoker un membre de ma classe:

   1:    public class Test: DynamicObject
   2:      {
   3:   
   4:          public string DummyMethod()
   5:          { return "Dummy!"; }
   6:   
   7:          public override bool TryInvokeMember(InvokeMemberBinder binder,
   8:   object[] args, out object result)
   9:          {
  10:              
  11:              bool retVal = false;
  12:              result = null;
  13:              string methodName = binder.Name;
  14:              var goodMethodInfo= this.GetType().GetMethods().
  15:                  Where(m => m.Name.Equals(methodName, 
  16:  StringComparison.CurrentCultureIgnoreCase)).
  17:                  Single();
  18:   
  19:              if (goodMethodInfo!=null)
  20:              {
  21:                  result = goodMethodInfo.Invoke(this, args);
  22:                  retVal = true;
  23:              }
  24:              return retVal;
  25:          }
  26:   
  27:      }

Je récupère le nom de la méthode que je tente d’exécuter. Je cherche la méthode qui à le même nom (en ignorant la casse) que j’exécute dans la foulé et le tour est joué Sourire

Bien sûr, ma classe hérite de DynamicObject et cela n’est pas forcément utile dans un projet réel…mais ca montre bien que derriere les dynamics, se cache pas mal de réflexions.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 17 mars 2011 23:11 par fathi
Classé sous : ,

Commentaires

MisterG a dit :

Bonjour,

Je crois qu'on dit la casse et pas la case.

# mars 18, 2011 09:16

fathi a dit :

merci!

# mars 18, 2011 10:00
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01