Question

Donné: instance System.Type.

L'objectif est d'obtenir les méthodes nouvellement introduites (je ne connais pas le bon mot) dans le type, qui ne sont pas héréditaires - pas remplacés

Je veux utiliser .net Reflection et j'ai essayé le Type.GetMethods() méthode. Mais, il est revenu même hérité et remplacé.

J'ai pensé à filtrer après avoir obtenu toutes les méthodes. Et j'ai regardé les propriétés / méthodes exposées par MethodInfo classer. Je ne pouvais pas comprendre comment obtenir ce que je voulais.

Par exemple: j'ai un cours,class A { void Foo() { } }

Quand j'invoque typeof(A).GetMethods() , Je reçois Foo avec les méthodes dans System.Object: Equals, ToString, GetType et GetHashCode. Je veux le filtrer à seulement Foo.

Est-ce que quelqu'un sait comment faire ça?

Merci.

Était-ce utile?

La solution

GetMethods a une surcharge qui vous permet de spécifier Reliureflags. Par exemple, si vous devez obtenir toutes les méthodes déclarées, publiques et instance, vous devez transmettre les drapeaux correspondants.

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

Autres conseils

J'espère que c'était ce que tu veux

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

essaye ça

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

Vous pouvez filtrer la collection Methodinfo retournée en déclarant:

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top