sobota, 14. júla 2007

.NET - spustenie súkromnej metódy rodičovskej triedy pomocou reflexie

Raz som pri unit testoch potreboval spustiť súkromnú metódu rodičovskej triedy pomocou reflexie. Problémom je, že metóda GetMethod triedy System.Type nevráti MethodInfo pre súkromné metódy definované na úrovni rodičovskej triedy. Môj trik spočíva v tom, že MethodInfo je vytvorené pre rodičovskú triedu a Invoke je volané s parametrom kde je odkaz na triedu potomka:


   1:  // Faq inherits from BusinessObject

   2:  Faq faq = new Faq();    

   3:  RunPrivateMethodOnBusinessObject(faq, "CreateInsertCommand")

   4:   

   5:  private object RunPrivateMethodOnBusinessObject(object obj, string methodName)

   6:  {

   7:      MethodInfo method = typeof(BusinessObject).GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);

   8:      return method.Invoke(obj, null);

   9:  }

Žiadne komentáre: