这是我想要做的。我正在创建一个类,其中包含用于访问类中的字段的索引器,以及用于添加/删除新字段的类。基本上这个类就像一个带有一组静态和动态字段的类。我正在为索引器使用字典。我的问题是,当用户明确重新初始化其中一个字段时,如何找到并更新字典中的静态对象?例如:
public class foo
{
}
public class bar
{
Dictionary<string, foo> dict = new Dictionary<string, foo>();
public bar()
{
//using reflection to initialize all fields
}
public foo this[string name]
{
get
{
return dict[name];
}
}
}
public class bar2:bar //Note: defined by the user, can't use get/setter to update it
{
public foo field1;
public foo field2;
public foo field3;
}
public static void main()
{
bar2 test = new bar2();
test.field1 = new foo();
test["field1"] //this points to the old field1. How can I update it automatically when test.field1 = new foo(); is called?
}
有些人可能会建议我使用反射来做,但如果用户调用remove&#34; field1&#34;并添加了一个名为field1的新动态字段,我想返回用户创建的新字段而不是类中定义的字段。
答案 0 :(得分:1)
如果您的用户和定义字段,则需要调整逻辑以每次动态查找结果。幸运的是,通过将字段存储在字典中,您可以避免大部分的反射开销。
Dictionary<string, FieldInfo> dict = new Dictionary<string, FieldInfo>();
public bar()
{
//If you are using reflection you should be getting this
FieldInfo info;
dict[info.Name] = info;
}
public foo this[string name]
{
get { return dict[name].GetValue(this); }
set { dict[name].SetValue(this, value); }
}