如何获取类型中的方法

时间:2012-02-29 23:18:33

标签: c# .net system.reflection

给定:System.Type实例。

目的是在类型中获得新引入的方法(我不知道正确的词) - 没有继承 - 没有被覆盖

我想使用.NET Reflection,我尝试了Type.GetMethods()方法。但是,它甚至返回了继承和被覆盖的。

我想到了在获得所有方法后的过滤。我查看了MethodInfo类公开的属性/方法。我无法想象得到我想要的东西。

例如:我有一节课, class A { void Foo() { } }

当我调用typeof(A).GetMethods()时,我得到Foo以及System.Object中的方法:EqualsToStringGetType和{{ 1}}。我想将其过滤到GetHashCode

有谁知道怎么做?

感谢。

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

我希望这就是你想要的

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

答案 2 :(得分:1)

试试这个

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

答案 3 :(得分:0)

您可以通过DeclaringType过滤返回的MethodInfo集合:

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