我有以下类树:
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
,而我希望它会调用与上面完全相同的方法。
我尝试了几个绑定标志无济于事。有什么帮助吗?
答案 0 :(得分:20)
您应该使用overloads一个BindingFlags
参数,并包含FlattenHierarchy
。
指定应返回层次结构中的公共和受保护静态成员。不返回继承类中的私有静态成员。静态成员包括字段,方法,事件和属性。不返回嵌套类型。
(编辑删除关于私有静态方法的观点,现在问题已被更改为公开。)
答案 1 :(得分:5)
您需要将BindingFlags.FlattenHierarchy
标记传递给GetMethod
才能搜索层次结构:
typeof(C).GetMethod("GetMe", BindingFlags.FlattenHierarchy, null, new Type[] { typeof(SomeOtherClass) }, null)).Invoke(null, parameter));