在便携式 Class 库中使用反射继承 public 静态字段
Getting inherited public static field with Reflection in Portable Class Libraries
在便携式 Class 库中,我有 2 个 类:
parent
public class Parent
{
public string inherited;
public static string inheritedStatic;
}
child 派生自它
public class Child : Parent
{
public static string mine;
}
问题是我无法获取名为 "inheritedState" 的继承静态字段,我只能获取 non-static ("inherited").
这是我的代码 运行:
class Program
{
static void Main(string[] args)
{
var childFields = typeof(Child).GetTypeInfo().GetRuntimeFields();
foreach (var fieldInfo in childFields)
{
Console.WriteLine(fieldInfo);
}
}
}
如何获取继承的静态字段?
谢谢!
您可以使用:
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();
}
对于 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;
}
在便携式 Class 库中,我有 2 个 类:
parent
public class Parent
{
public string inherited;
public static string inheritedStatic;
}
child 派生自它
public class Child : Parent
{
public static string mine;
}
问题是我无法获取名为 "inheritedState" 的继承静态字段,我只能获取 non-static ("inherited").
这是我的代码 运行:
class Program
{
static void Main(string[] args)
{
var childFields = typeof(Child).GetTypeInfo().GetRuntimeFields();
foreach (var fieldInfo in childFields)
{
Console.WriteLine(fieldInfo);
}
}
}
如何获取继承的静态字段? 谢谢!
您可以使用:
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();
}
对于 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;
}