2011-12-11 10 views
3

親オブジェクトから静的メソッドを取得する際に問題が発生しました。次のコードを調べます。親オブジェクトの静的メソッドを取得する

var objType = typeof(myClass); // myClass is a ChildClass object 
var methods = objType.GetMethods(BindingFlags.Static | BindingFlags.FlattenHierarchy); 

親クラス:

public class ParentClass { 
    public static T GrabStuff<T>(string values) { 
     GrabStuff<T>(values, false); 
    } 

    // ---- Updated 
    public static T GrabStuff<T>(string values, bool isSomething) { 
     // TODO: Do Stuff 
    } 
    // ---- Updated 
} 

子供クラス:

public class ChildClass : ParentClass { 
} 

メソッドが返すと0オブジェクトの配列されます。

静的メソッドのリストを取得するためにここで何か間違っていますか?

答えて

4

あなたはBindingFlags.Publicが指定されていませんでした:

var objType = typeof(ChildClass); 
var methods = objType.GetMethods(BindingFlags.Static | 
           BindingFlags.FlattenHierarchy | 
           BindingFlags.Public); 

GrabStuffEqualsReferenceEqualsためMethodInfo年代が返されます。この変更により。

+0

はい、これは働いていました。しかし、どのように私はオーバーロードされているメソッドをプルするだろうか?これは、BindingFlags.Publicを追加したときに機能しました。しかし、上記の例では表示されていませんが、GrabStuffがオーバーロードされており、「あいまい一致」が見つかりました。私はGetMethod関数を使用します。何か案は? – Sean

+0

これを再現するいくつかのコードで質問を更新できますか? – BrokenGlass

+0

コードが編集され、更新されました。 – Sean

1

あなたはBindingFlags.Staticに加えてBindingFlags.Publicを指定する必要があります。

var objType = typeof(ChildClass); 
var methods = objType.GetMethods(BindingFlags.Public | BindingFlags.Static); 
関連する問題