Comment obtenir des méthodes dans un type
-
14-11-2019 - |
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.
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));