как получить метод по методу getmethod отражения, метод и метод переопределены, и у параметров есть справочный самоопределяемый параметр - PullRequest
0 голосов
/ 27 июня 2010

случай следующим образом:

в проекте

public class X1
{
  public string Name="X1";
}

public class X2
{
  public string GetName(string name)
  {
   return "";
  }

  public string GetName(string name,ref X1 x1)
  {
   return "";
  }
}

Вопрос:

как получить MethodInfo 'GetName' с помощью функции getmethd отражения в другом проекте

Ответы [ 3 ]

1 голос
/ 27 июня 2010

Два варианта:

  • Вы можете позвонить typeof(X2).GetMethods(), а затем просто отфильтровать те с неправильными именами.Иногда это может быть проще, чем вызывать GetMethod() с предоставлением точных данных.
  • Вы можете использовать Type.MakeByRefType, чтобы указать тип параметра ref при вызове Type.GetMethod().Так что в этом случае вы бы использовали (при условии, что вам нужен второй из показанных методов):

    MethodInfo method = typeof(X2).GetMethod
        ("GetName", new [] { typeof(string), typeof(X1).MakeByRefType() });
    
0 голосов
/ 27 июня 2010

вы можете сделать это

foreach (var mi in typeof(X2).GetMethods())
{
    if (mi.Name.Equals("GetName"))
    {
        Console.WriteLine("Method Name : {0}", mi.Name);
        var miPerms = mi.GetParameters();
        if (miPerms.Count() > 0)
            Console.WriteLine("Params : {0}", miPerms.Select(p => p.ParameterType + " " + p.Name).Aggregate((a, b) => a + "," + b));
    }
}
0 голосов
/ 27 июня 2010
var method1 = typeof(X2).GetMethod("GetName", new[] { typeof(string) });
var method2 = typeof(X2).GetMethod("GetName", new[] { typeof(string), typeof(X1).MakeByRefType() });
...