C#Reflection - GetMethod

时间:2016-07-15 14:48:40

标签: c# reflection

我正在开发一个项目,其中System.Web.Helpers.Webgrid被用作新网格的基类。 我相信它使用反射来调用基类的私有方法。

有人可以澄清....... 在下面的代码中,看到GetDefaultColumnsMethod返回一些内容,我可以假设System.Web.Helpers.WebGrid上有一个名为"GetDefaultColumns"的方法吗?

private MethodInfo GetDefaultColumnsMethod 
{
    get { return typeof(System.Web.Helpers.WebGrid).GetMethod("GetDefaultColumns", BindingFlags.Instance | BindingFlags.NonPublic); }
}

private IEnumerable<WebGridColumn> GetDefaultColumns(IEnumerable<string> exclusions)
{
    return (IEnumerable <WebGridColumn>)GetDefaultColumnsMethod.Invoke((System.Web.Helpers.WebGrid)this, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { exclusions }, null);
}

2 个答案:

答案 0 :(得分:2)

  

在下面的代码中,看到GetDefaultColumnsMethod返回   什么,我可以假设System.Web.Helpers.WebGrid有一个方法   在它上面命名为&#34; GetDefaultColumns&#34;?

  • Type.GetMethod搜索由其名称
  • 指定的方法
  • BindingFlags.Instance | BindingFlags.NonPublic表示您搜索非static实例方法(而不是public方法)(请注意它可能是{{1} } / protected虽然)。

答案 1 :(得分:0)

深入挖掘 - 我在下面添加了调试代码,现在我有一个方法列表....

所以我现在可以进行调试,看看有什么......以及更多关于WebGrid组件的新版本中没有的内容。

    Type tt = this.GetType();
    Type t = tt.BaseType;

    PropertyInfo[] props =
        t.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
    MethodInfo[] mths = t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);