18

Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)用来检索给定类型的一组方法。

问题是返回的MethodInfo可能包含编译器生成的我不想要的方法。例如:

  • 财产bool Enabled { get; }将得到bool get_Enabled()

  • 事件SomethingChanged将得到 add_SomethingChanged(EventHandler) 并且 remove_SomethingChanged(EventHandler)

我可能可以添加一些过滤器逻辑来摆脱它们,这可能会变得非常复杂。我想知道我是否可以做其他事情(例如使用BindingFlags设置)来仅检索用户定义的方法?

4

3 回答 3

30
typeof(MyType)
    .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .Where(m => !m.IsSpecialName)
于 2010-09-07T18:45:09.487 回答
2

我认为您最好的选择是过滤掉具有该CompilerGenerated属性的方法。这可能更具前瞻性,尽管这并不能说明假设的未来编译器完全不尊重这个属性。该IsSpecialName测试可能也是必需的,因为它看起来好像 C# 编译器没有将属性附加到事件addremove方法。

于 2010-09-07T18:47:35.927 回答
-3

秘密是BindingFlags。仅声明

typeof(MyType).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
于 2017-08-25T20:01:22.177 回答