7

给定:System.Type 实例。

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

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

得到所有方法后,我想到了过滤。我查看了MethodInfo类公开的属性/方法。我不知道如何得到我想要的。

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

当我调用 时typeof(A).GetMethods(),我与: 、和Foo中的方法相处融洽。我想将其过滤为 only 。System.ObjectEqualsToStringGetTypeGetHashCodeFoo

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

谢谢。

4

4 回答 4

12

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

var declaredPublicInstanceMethods = 
    typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
于 2012-02-29T23:24:43.083 回答
2

我希望这是你想要的

var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly);
于 2012-02-29T23:28:57.957 回答
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

于 2012-02-29T23:29:15.283 回答
0

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

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A));
于 2012-02-29T23:28:22.947 回答