使用可移植类库中的Reflection获取继承的公共静态字段

时间:2015-06-19 12:33:44

标签: c# .net reflection portable-class-library

在便携式类库中,我有两个类:

父母

public class Parent
{
    public string inherited;
    public static string inheritedStatic;
}

从中衍生的孩子

public class Child : Parent
{
    public static string mine;
}

问题是我无法获得名为“inheritedState”的继承静态字段,我只是得到非静态(“继承”)。

这是我正在运行的代码:

class Program
{
    static void Main(string[] args)
    {
        var childFields = typeof(Child).GetTypeInfo().GetRuntimeFields();

        foreach (var fieldInfo in childFields)
        {
            Console.WriteLine(fieldInfo);
        }
    }
}

我该怎么做才能获得继承的静态字段? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用:

public static FieldInfo[] DeclaredFields(TypeInfo type)
{
    var fields = new List<FieldInfo>();

    while (type != null)
    {
        fields.AddRange(type.DeclaredFields);

        Type type2 = type.BaseType;
        type = type2 != null ? type2.GetTypeInfo() : null;
    }

    return fields.ToArray();
}

答案 1 :(得分:0)

对于PCL库,并测试了我的:

public static IEnumerable<FieldInfo> DeclaredFields(Type type)
    {
        var fields = new List<FieldInfo>();

        while (type != null)
        {
            fields.AddRange(type.GetRuntimeFields());
            type = type.GetTypeInfo().BaseType;
        }

        return fields;
    }