订阅类似于被分配事件的对象实例

时间:2014-10-17 18:41:47

标签: c#

这是我想要做的。我正在创建一个类,其中包含用于访问类中的字段的索引器,以及用于添加/删除新字段的类。基本上这个类就像一个带有一组静态和动态字段的类。我正在为索引器使用字典。我的问题是,当用户明确重新初始化其中一个字段时,如何找到并更新字典中的静态对象?例如:

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的新动态字段,我想返回用户创建的新字段而不是类中定义的字段。

1 个答案:

答案 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); }
}