我正在开发一个项目,其中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);
}
答案 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);