如何通过反射获取方法的getmethod技术和方法被覆盖,参数具有参考自定义参数

时间:2010-06-27 06:29:57

标签: c# reflection getmethod

案例如下:

在项目中

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 "";
  }
}

问题:

如何通过其他项目中的反射getmethd函数获取'GetName'MethodInfo

3 个答案:

答案 0 :(得分:1)

两个选项:

  • 您可以拨打typeof(X2).GetMethods()然后过滤掉名称错误的人。这有时比调用提供确切数据的GetMethod()更容易。
  • 您可以使用Type.MakeByRefTyperef的调用中指定Type.GetMethod()参数类型。所以在这种情况下你会使用(假设你想要显示第二种方法):

    MethodInfo method = typeof(X2).GetMethod
        ("GetName", new [] { typeof(string), typeof(X1).MakeByRefType() });
    

答案 1 :(得分:0)

var method1 = typeof(X2).GetMethod("GetName", new[] { typeof(string) });
var method2 = typeof(X2).GetMethod("GetName", new[] { typeof(string), typeof(X1).MakeByRefType() });

答案 2 :(得分:0)

你可以这样做

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));
    }
}