7

指定: System.Type インスタンス。

目的は、新しく導入されたメソッド (正しい言葉がわかりません) を型に取得することです。これは、継承されず、オーバーライドされません。

.NET Reflection を使いたくて、そのType.GetMethods()方法を試してみました。ただし、継承およびオーバーライドされたものも返されました。

すべてのメソッドを取得した後、フィルタリングを考えました。MethodInfoそして、クラスによって公開されているプロパティ/メソッドを見ました。欲しいものを手に入れる方法がわかりませんでした。

例:私はクラスを持っています、 class A { void Foo() { } }

を呼び出すと、 、、およびのメソッドとtypeof(A).GetMethods()仲良くなります。のみにフィルタリングしたい。FooSystem.ObjectEqualsToStringGetTypeGetHashCodeFoo

誰もこれを行う方法を知っていますか?

ありがとう。

4

4 に答える 4

12

GetMethodsBindingFlagsを指定できるオーバーロードがあります。たとえば、宣言されたパブリックなインスタンス メソッドをすべて取得する必要がある場合は、対応するフラグを渡す必要があります。

var declaredPublicInstanceMethods = 
    typeof(A).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
于 2012-02-29T23:24:43.083 に答える
2

これがあなたの望むものだったことを願っています

var methods = typeof(MyType).GetMethods(System.Reflection.BindingFlags.DeclaredOnly);
于 2012-02-29T23:28:57.957 に答える
1

これを試して

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

于 2012-02-29T23:29:15.283 に答える
0

返された MethodInfo コレクションを DeclaringType でフィルター処理できます。

var methods = typeof(A).GetMethods().Where(mi => mi.DeclaringType== typeof(A));
于 2012-02-29T23:28:22.947 に答える