2012-02-29 33 views
6

鉴于:System.Type实例。如何获得某种类型的方法

的目的是让新推出的方法(我不知道正确的字)的类型,这是 - 不继承 - 不重写

我想使用.NET和反思我尝试了Type.GetMethods()方法。但是,它甚至返回了继承和重写的结果。

我想在获得所有方法后进行过滤。我看了MethodInfo类暴露的属性/方法。我无法想象如何得到我想要的东西。

例如:我有一个类, class A { void Foo() { } }

当我调用typeof(A).GetMethods(),我得到FooSystem.Object的方法一起:EqualsToStringGetTypeGetHashCode。我想过滤掉只有Foo

有谁知道如何做到这一点?

谢谢。

+1

继承和重写的方法属于该类型。你为什么期望他们不被列出?你能解释一下你试图完成什么吗? – asawyer 2012-02-29 23:22:32

+0

我试图生成一个报告,说这些方法已经新添加到库/产品中。由于业务需求,我不想列出继承/重写的方法。它们必须作为其定义类型的一部分进行报告。 – pnvn 2012-02-29 23:49:26

回答

8

GetMethods有一个超载,可让您指定BindingFlags。例如。所以如果您需要获取所有已声明的公共实例方法,则需要传递相应的标志。

var declaredPublicInstanceMethods = 
    typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); 
+0

谢谢。这大部分工作。重写的方法仍然显示。 – pnvn 2012-02-29 23:49:02

+1

那么,如果A重写一个方法,该方法是类型声明的一部分,那么为什么不呢? – 2012-02-29 23:54:58

0

可以过滤返回的MethodInfo收集由DeclaringType:

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A)); 
2

我希望这是你想要什么

var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly); 
+0

没有工作。出于某种原因,仅仅声明标志是不够的。不管怎么说,还是要谢谢你。 – pnvn 2012-02-29 23:50:33

相关问题