我在 c# 中有一个名为 C 的类。当我执行程序时,我创建了这个类的新对象。在某些时候,我需要创建一个列表来List<C> listC = new List();
放置我创建的所有对象。当然,我可以在创建此对象后使用 list.Add 为每个对象执行此操作。但是由于某些难以解释的原因,我宁愿只将 thiiss 类创建的所有对象添加到列表中。
这有可能吗?我不确定是否有解决方案:-)。
提前感谢所有回答的人。
您需要的是工厂模式。您使用一个类来构建您的类并跟踪构建的内容。
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);
}
}
如果您将其设为静态,您可以在不通过列表的情况下逃脱。
解决该问题的方法可能是这样的:
不可能“找到”特定类型的所有对象,您可以做的是从一开始就构建和维护这个列表。你可以通过创建一个“工厂”方法来创建一个新c
对象,将它添加到语音列表中,并返回它的引用。“工厂”函数和列表可以(也许应该)是单例,取决于你将如何使用它。