计算类方法中类类型的对象数

Non*_*biz 1 c# methods class object count

如何在该类的方法中计算类类型的对象数?就此而言,如何在不在列表中添加对象的情况下在类之外执行此操作?

我应该想到这个!谢谢!我会在一段时间内没有回答,看看是否有更好的方法,因为我同意.我只是把头包裹在OO周围.如果你不介意让我解释一下,也许总的来说有更好的方法吗?

我有一个对象类,我想添加3条信息,但首先我要循环并确保没有其他对象与三个部分中的任何一个相同,如果有,为每个做不同的事情案件.

Ada*_*son 13

实现您正在寻找的东西的唯一方法是在类本身中保留这些对象的静态列表.如果你只是想看看某个地方是否有一个没有被垃圾收集的实例,那么你就会想要使用这个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于您是OO/.NET的新手,不要让WeakReference使用吓到你.垃圾收集的工作方式是引用计数.只要某段代码或对象可以访问特定实例(意味着它在作为本地,实例或静态变量的一部分或作为本地,实例或静态变量的一部分),则该对象被认为是活动的.一旦该变量超出范围,在此之后的某个时刻,垃圾收集器可以/将收集它.但是,如果要维护所有引用的列表,它们将永远不会超出范围,因为它们将作为该列表中的引用存在.这WeakReference是一个特殊的类,允许您维护对垃圾收集器将忽略的对象的引用.该IsAlive属性指示是否WeakReference指向仍存在的有效对象.

所以我们在这里做的是保持这个WeakReferences的列表指向MyClass已经创建的每个实例.当你想获得它们的列表时,我们遍历我们的WeakReferences并抢夺所有活着的.我们发现不再存在的任何东西被放入另一个临时列表中,以便我们可以从外部列表中删除它们(这样WeakReference就可以收集类本身,并且我们的列表不会无缘无故地变大).