【问题标题】:Get static method of parent object获取父对象的静态方法
【发布时间】:2011-12-11 05:45:25
【问题描述】:

从父对象获取静态方法时遇到问题。检查以下代码:

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 个对象的数组。

我在这里做错了什么来提取静态方法列表吗?

【问题讨论】:

    标签: c# reflection static-methods


    【解决方案1】:

    你没有指定BindingFlags.Public

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

    通过此更改,返回 GrabStuffEqualsReferenceEqualsMethodInfo

    【讨论】:

    • 是的,这行得通。但是,我将如何提取重载的方法?当我添加 BindingFlags.Public 时,这很有效。但是,上面的示例没有显示它,但 GrabStuff 已重载,我得到“找到不明确的匹配项”。当我使用 GetMethod 函数时。有什么想法吗?
    • 你能用一些重现这个问题的代码更新你的问题吗?
    • 肖恩,您更新后的示例对我有用(返回 4 个方法)- .NET 4 没有重现
    • 是的,它适用于 GetMethods。当我使用 GetMethod 按名称提取方法时,我在问。我想,因为它超载了,我必须使用 GetMethods 并通过它的索引获取我需要的方法?
    • 您必须唯一标识方法 - 因为在这种情况下名称不够,您必须使用允许您指定参数类型的GetMethod 重载:msdn.microsoft.com/en-us/library/6hy0h0z1.aspx跨度>
    【解决方案2】:

    除了BindingFlags.Static,您还必须指定BindingFlags.Public

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多