12

私は次のクラスツリーを持っています:

public class A
{
    public static object GetMe(SomeOtherClass something)
    {
        return something.Foo();
    }
}

public class B:A
{
    public static new object GetMe(SomeOtherClass something)
    {
        return something.Bar();
    }
}

public class C:B
{

}

public class SomeOtherClass
{

}

与えられSomeOtherClass parameter = new SomeOtherClass()た ) これは動作します:

typeof(B).GetMethod("GetMe", new Type[] { typeof(SomeOtherClass) })).Invoke(null, parameter));

でもこれは:

typeof(C).GetMethod("GetMe", new Type[] { typeof(SomeOtherClass) })).Invoke(null, parameter));

をスローしNullReferenceExceptionますが、上記とまったく同じメソッドを呼び出すことを望みます。

いくつかのバインディング フラグを試してみましたが、役に立ちませんでした。何か助けはありますか?

4

2 に答える 2

24

パラメータを取るオーバーロードの 1 つを使用し、 を含める必要があります。BindingFlagsFlattenHierarchy

階層の上位にあるパブリックおよび保護された静的メンバーを返す必要があることを指定します。継承されたクラスのプライベート静的メンバーは返されません。静的メンバーには、フィールド、メソッド、イベント、およびプロパティが含まれます。ネストされた型は返されません。

(プライベート静的メソッドに関するポイントを削除するために編集されました。現在、質問はそれらを公開するように変更されています。)

于 2012-09-11T00:02:42.517 に答える
6

階層を検索するには、BindingFlags.FlattenHierarchyフラグを渡す必要があります。GetMethod

typeof(C).GetMethod("GetMe", BindingFlags.FlattenHierarchy, null, new Type[] { typeof(SomeOtherClass) }, null)).Invoke(null, parameter));
于 2012-09-11T00:02:52.703 に答える