In .NET, can you use reflection to get all non-inherited methods of a class?

前端 未结 4 675
滥情空心
滥情空心 2021-02-18 15:51

Because of this issue here, I\'m trying to write a custom JsonConverter that handles cases where you subclass a list or a collection, then add extra properties to it. As such,

相关标签:
4条回答
  • 2021-02-18 16:06

    You have to select all members in MySubClass and keep only those where DeclaringType == MySubClass.

    With LINQ, something like that (overkill) :

    MemberInfo[] notInherited = GetType("MySubClass").GetMembers().Where(m => m.DeclaringType == GetType("MySubClass"));
    

    Or with GetMembers() overload :

    MemberInfo[] notInherited = GetType("MySubClass").GetMembers(BindingFlags.DeclaredOnly);
    
    0 讨论(0)
  • 2021-02-18 16:17

    While calling "GetMembers" method to get the members of the Type, you can specify "DeclaredOnly" in binding flag.

    0 讨论(0)
  • 2021-02-18 16:19

    A lot of reflection functions accept a parameter of type BindingFlags. This enumeration includes a value DeclaredOnly:

    Specifies that only members declared at the level of the supplied type's hierarchy should be considered. Inherited members are not considered.

    0 讨论(0)
  • 2021-02-18 16:21

    MemberInfo.DeclaringType should do what you need. To get members directly defined in type X filter the members by DeclaringType == typeof(X).

    0 讨论(0)
提交回复
热议问题