将类的所有对象放在列表中

本文关键字:列表 对象 | 更新日期: 2023-09-27 18:00:02

我在c#中有一个名为c的类。在执行程序时,我会创建这个类的新obejct。在某个时刻,我需要创建一个列表List<C> listC = new List();,将我创建的所有对象放在其中。当然,我可以使用列表来完成这项工作。创建此对象后为每个对象添加。但由于某些难以解释的原因,我宁愿将该类创建的所有对象添加到列表中。

这有可能吗?我不确定是否有解决方案:-)。

提前感谢所有回答的人。

将类的所有对象放在列表中

您需要的是所谓的工厂模式。您使用一个类来构造您的类并跟踪所构造的内容。

public class CFactory
{
    public CFactory()
    {
        CreatedCBacking = new List<C>();
    }
    private List<C> CreatedCBacking;
    public IList<C> CreatedC
    {
        get
        {
             return CreatedCBacking.AsReadonly();
        }
    }
    public C NewC(String s, string t, bool b)
    {
       C temp = new C(s, t, b);
       CreatedCBacking.Add(temp);
       return temp;
    }
}
public class C
{
     public C(String s, string t, bool b)
     {
         //You class here
     }
}

你使用这个的方式就像这个

public static void Main()
{
    var factory = new CFactory();
    var c1 = factory.NewC("string", "string", true);
    var c2 = factory.NewC("string2", "string2", false);
    foreach(var c in factory.CreatedC)
    {
        //loops over c1 and c2
    }
}

您可以在创建对象时直接添加到列表中,例如:

List<C> list = new List<C>();
for(var i = 0; i < 10; i++) {
    list.Add(new C());
}

或者,您可以将列表传递给类,并让它自己添加:

List<C> list = new List<C>();
public class C
{
    public C(List<C> list)
    {
        list.Add(this);
    }
}

如果你把它设置为静态的,你就可以不通过列表而逃脱惩罚。

解决该问题的方法如下:
不可能"找到"特定类型的所有对象,你可以做的是从一开始就构建和维护这个列表。您可以通过创建一个"factory"方法来实现这一点,该方法创建一个新的c对象,将其添加到口语列表中,并返回对其的引用。"工厂"函数和列表可以(也可能应该)是singleton,这取决于您将如何使用它。