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属性を持つメソッドを除外することだと思います。これは、将来にわたって利用できる可能性が高くなりますが、この属性を完全に軽視する仮想の将来のコンパイラーは考慮されていません。C#コンパイラが属性をイベントとメソッドにアタッチしていないように見えるため、テストIsSpecialNameもおそらく必要です。addremove

于 2010-09-07T18:47:35.927 に答える
-3

その秘密はBindingFlagsです。DeclaredOnly

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