使用反射和c#调用静态方法时出现问题

时间:2010-09-22 14:27:25

标签: c# reflection

我有这两个课程:

Item<T> : BusinessBase<T> where T : Item<T>
{
     public static T NewItem()
     {
      //some code here
     }
}
Video : Item <Video>
{

}

现在我想使用反射在类Video上调用 NewItem()方法。 当我尝试这个时:

MethodInfo inf = typeof(Video).GetMethod("NewItem", BindingFlags.Static);

执行此行后,对象 inf 仍为null。 我可以在类Video上调用静态 NewItem()方法吗?

1 个答案:

答案 0 :(得分:18)

除了BindingFlags.Public之外,您还需要指定BindingFlags.FlattenHierarchyBindingFlags.Static

MethodInfo inf = typeof(Video).GetMethod("NewItem",
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);

或者,您可以从没有BindingFlags.FlattenHierarchy的声明类型获取方法:

MethodInfo inf = typeof(Item<Video>).GetMethod("NewItem",
    BindingFlags.Static | BindingFlags.Public);

我已经尝试了两种方式,但它们都有效。