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

C# 订阅类似于正在分配事件的对象实例,c#,C#,这就是我要做的。我正在创建一个包含索引器的类,用于访问类中的字段,以及添加/删除新字段。基本上,这个类就像一个包含一组静态和动态字段的类。我正在为索引器使用字典。我的问题是,当用户显式地重新初始化其中一个字段时,如何查找并更新字典中的静态对象?例如: public class foo { } public class bar { Dictionary<string, foo> dict = new Dictionary<string, foo>();

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

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

看看这个网站,很容易理解这些例子。你研究过如何创建和/或使用索引器以及何时使用它们吗。。?还请阅读静态类与InstancePlease之间的区别。类中有一个静态声明的字段field1。用户将如何删除该字段?另外,main中的代码显示了索引器的使用,但您没有在bar类中声明索引器。如果你想得到好的答案,你需要发布真实的代码,并确保示例简洁完整。@PeterDuniho删除主要用于删除用户创建的动态字段。但我无法控制用户将要做什么。所以我不得不假设他们可能会删除静态字段,并创建一个同名的新动态字段。在这种情况下,索引器应该返回动态索引。无法发布真正的代码sry..@DJKRAZE well ikr如何创建索引器,只是忘记了包含它们。。很抱歉我所说的静态字段是指预定义字段,而不是静态[type]字段。对于混淆,问题已更新。我不能使用get/set,因为它是用户定义的字段