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

本文关键字:事件 对象 实例 分配 类似于 | 更新日期: 2023-09-27 18:26:52

以下是我要做的。我正在创建一个类,该类包含用于访问类中字段以及添加/删除新字段的索引器。基本上,这个类就像一个具有一组静态和动态字段的类。我正在用字典做索引器。我的问题是,当用户显式地重新初始化其中一个字段时,我将如何查找和更新字典中的静态对象?示例:

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"field1"并添加一个名为field1的新动态字段,我会希望返回用户创建的新字段,而不是类中定义的字段。

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

如果您的用户和定义字段,那么您需要调整逻辑,以便每次都动态查找结果。幸运的是,通过将字段存储在字典中,可以避免大部分反射开销。

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