给定:System.Type实例。
目的是在类型中获得新引入的方法(我不知道正确的词) - 没有继承 - 没有被覆盖
我想使用.NET Reflection,我尝试了Type.GetMethods()
方法。但是,它甚至返回了继承和被覆盖的。
我想到了在获得所有方法后的过滤。我查看了MethodInfo
类公开的属性/方法。我无法想象得到我想要的东西。
例如:我有一节课,
class A { void Foo() { } }
当我调用typeof(A).GetMethods()
时,我得到Foo
以及System.Object
中的方法:Equals
,ToString
,GetType
和{{ 1}}。我想将其过滤到GetHashCode
。
有谁知道怎么做?
感谢。
答案 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));