如何获得某种类型的方法
鉴于:System.Type实例。如何获得某种类型的方法
的目的是让新推出的方法(我不知道正确的字)的类型,这是 - 不继承 - 不重写
我想使用.NET和反思我尝试了Type.GetMethods()
方法。但是,它甚至返回了继承和重写的结果。
我想在获得所有方法后进行过滤。我看了MethodInfo
类暴露的属性/方法。我无法想象如何得到我想要的东西。
例如:我有一个类, class A { void Foo() { } }
当我调用typeof(A).GetMethods()
,我得到Foo
在System.Object
的方法一起:Equals
,ToString
,GetType
和GetHashCode
。我想过滤掉只有Foo
。
有谁知道如何做到这一点?
谢谢。
GetMethods
有一个超载,可让您指定BindingFlags。例如。所以如果您需要获取所有已声明的公共实例方法,则需要传递相应的标志。
var declaredPublicInstanceMethods =
typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
谢谢。这大部分工作。重写的方法仍然显示。 – pnvn 2012-02-29 23:49:02
那么,如果A重写一个方法,该方法是类型声明的一部分,那么为什么不呢? – 2012-02-29 23:54:58
可以过滤返回的MethodInfo收集由DeclaringType:
var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A));
我希望这是你想要什么
var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly);
没有工作。出于某种原因,仅仅声明标志是不够的。不管怎么说,还是要谢谢你。 – pnvn 2012-02-29 23:50:33
试试这个
typeof(Foo).GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly)
http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx
http://msdn.microsoft.com/en-us/library/4d848zkb.aspx
继承和重写的方法属于该类型。你为什么期望他们不被列出?你能解释一下你试图完成什么吗? – asawyer 2012-02-29 23:22:32
我试图生成一个报告,说这些方法已经新添加到库/产品中。由于业务需求,我不想列出继承/重写的方法。它们必须作为其定义类型的一部分进行报告。 – pnvn 2012-02-29 23:49:26