我有以下课程
public interface ISomeInterface
{
void DoThings();
}
public class SomeImplementation1 : ISomeInterface
{
public void DoThings() { /*..*/ }
}
public class Base
{
public static ISomeInterface field;
}
public class Derived1 : Base
{
static Derived1() { field = new SomeImplementation(); }
}
Type derivedType = // retrieve a type derived from Base
FieldInfo fieldInfo = derivedType.GetField("field", BindingFlags.Static | BindingFlags.Public); // is null
ISomeInterface a = (ISomeInterface) fieldInfo.GetValue(null);
a.DoThings();
因此,我想获取在Base中定义但在Derived中设置的静态字段值。同时,我没有对初始化的派生对象的引用,而只有其类型。
当我尝试查找相应的字段信息时,结果为null。据我了解,静态字段绑定到定义它们的类。这就是为什么在给定派生类的情况下我无法获取字段引用的原因。
有没有办法解决这个问题?
某些情况:我与Unity合作。 Class Base是MonoBehaviour,我不想实例化它,因为它会导致性能开销。同时,我想访问一些绑定到其派生类并由ISomeInterface的实现表示的逻辑。
答案 0 :(得分:0)
由derivedType
指示的类型没有字段field
。这是静态绑定到Base
类的。所以你有两个机会
使用基本类型:
Type derivedType = // retrieve a type derived from Base
FieldInfo fieldInfo = derivedType.BaseType.GetField("field", BindingFlags.Static | BindingFlags.Public); // is nul
展平层次结构以从基类中获取所有字段:
Type derivedType = // retrieve a type derived from Base
FieldInfo fieldInfo = derivedType.GetField("field", BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);
除此之外,您无需使用反射,也不需要实例来访问静态字段。这就是static
的全部用法。只需使用此:
ISomeInterface a = Base.field;