[英]C# Reflection - GetMethod
我正在一个项目中,其中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);
}
在下面的代码中,看到GetDefaultColumnsMethod返回了某些内容,我可以假定System.Web.Helpers.WebGrid上有一个名为“ GetDefaultColumns”的方法吗?
是。
Type.GetMethod
搜索由其名称指定的方法 BindingFlags.Instance | BindingFlags.NonPublic
BindingFlags.Instance | BindingFlags.NonPublic
意味着您搜索的实例方法(相对于static
方法)是非public
(请注意,它可能是protected
/ internal
)。 深入研究-我在下面添加了调试代码,现在有了方法列表。
因此,我现在可以调试并查看其中的内容……,更重要的是,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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.