如何计算该类的方法中该类类型的对象数量?就此而言,如何在类之外执行此操作而不将对象添加到列表中?
我早该想到的!谢谢!我将暂时搁置它,看看是否有更好的方法,因为我同意。我只是把我的头围绕着面向对象。如果您不介意让我多解释一下,也许总体上有更好的方法?
我有一个对象类,我想向其中添加 3 条信息,但首先我想循环遍历并确保没有其他对象与这三条信息中的任何一条相同,如果有,则为每个对象执行不同的操作案件。
完成您正在寻找的任务的唯一方法是在类本身中保留这些对象的静态列表。如果您只想查看某处是否有一个实例尚未被垃圾收集,那么您将需要使用WeakReference
班级。例如...
public class MyClass
{
private static List<WeakReference> instances = new List<WeakReference>();
public MyClass()
{
instances.Add(new WeakReference(this));
}
public static IList<MyClass> GetInstances()
{
List<MyClass> realInstances = new List<MyClass>();
List<WeakReference> toDelete = new List<WeakReference>();
foreach(WeakReference reference in instances)
{
if(reference.IsAlive)
{
realInstances.Add((MyClass)reference.Target);
}
else
{
toDelete.Add(reference);
}
}
foreach(WeakReference reference in toDelete) instances.Remove(reference);
return realInstances;
}
}
由于您是 OO/.NET 的新手,因此不要让WeakReference
用吓唬你。垃圾收集的工作方式是通过引用计数。只要某段代码或某个对象可以访问特定实例(意味着它在作为本地、实例或静态变量的一部分或一部分的范围内),那么该对象就被认为是活动的。一旦该变量超出范围,垃圾收集器就可以/将会收集它。但是,如果您要维护所有引用的列表,它们永远不会超出范围,因为它们将作为该列表中的引用存在。这WeakReference
是一个特殊的类,允许您维护对垃圾收集器将忽略的对象的引用。这IsAlive
属性表明是否WeakReference
指向仍然存在的有效对象。
所以我们在这里所做的就是保留这个列表WeakReference
s 指向每个实例MyClass
那已经被创建了。当您想获取它们的列表时,我们会迭代我们的WeakReference
并抢走所有活着的人。我们发现不再存在的任何内容都会被放入另一个临时列表中,以便我们可以从外部列表中删除它们(以便WeakReference
类本身可以被收集,并且我们的列表不会无缘无故地变大)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)