Search code examples
c#.netreflectionmethod-invocation

Why can't I call this method via string?


Question from a Reflection newbie. I have a method in a Windows Form:

private void handleOrderCode()
{
  //...do stuff
}

Which I am trying to call in the following manner:

Type t = this.GetType();
MethodInfo mi = t.GetMethod("handleOrderCode");
if (mi != null) mi.Invoke(this, null);

I have confirmed that "this" is not null. The space where the string "handleOrderCode" has been hardcoded is to be replaced with a string variable when this works. However, at present "mi" is always null when it evaluates in the if statement in the final line.

So what am I doing wrong?


Solution

  • You need to specify binding flags:

    using System.Reflection;
    
    t.GetMethod("handleOrderCode", BindingFlags.Instance | BindingFlags.NonPublic)
    

    Because overload without any flag means:

    BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance
    

    i.e. will not return any non-public (private, protected, etc) members.