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

2023-12-14

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

我早该想到的!谢谢!我将暂时搁置它,看看是否有更好的方法,因为我同意。我只是把我的头围绕着面向对象。如果您不介意让我多解释一下,也许总体上有更好的方法?

我有一个对象类,我想向其中添加 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指向仍然存在的有效对象。

所以我们在这里所做的就是保留这个列表WeakReferences 指向每个实例MyClass那已经被创建了。当您想获取它们的列表时,我们会迭代我们的WeakReference并抢走所有活着的人。我们发现不再存在的任何内容都会被放入另一个临时列表中,以便我们可以从外部列表中删除它们(以便WeakReference类本身可以被收集,并且我们的列表不会无缘无故地变大)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算类方法中类类型的对象数量 的相关文章

随机推荐

  • 单例模式的问题

    过去几天我一直在阅读有关单例模式的内容 人们普遍认为 需要它的场景很少 如果不是罕见的话 可能是因为它有自己的一系列问题 例如 在垃圾收集环境中 这可能是内存管理方面的问题 在多线程环境中 它可能会导致瓶颈并引入同步问题 从测试的角度来看令
  • 是否可以在 Java 运行时设置环境变量?

    是否可以在 Java 运行时设置环境变量 应用 在Java 1 5 java lang System 类中有 getenv 方法 我会 只需要一个 setenv 方法 是否可以修改java进程本身的环境变量 不在子进程中 通过JNI可以实现
  • android 检查数据库中是否存在记录

    我想检查 SQLite 数据库中是否存在记录 这是我到目前为止所做的 当我搜索已经存在的记录时 我从列表中的 EditText 获取值 code from activity class public View OnClickListener
  • 构建 DOM 中任何给定节点的 querySelector 字符串值

    我正在尝试找到一种方法来构建任何给定节点的 querySelector 字符串 换句话说 选择页面上的任何节点 是否可以遍历 DOM 并构建一个字符串 允许我将生成的字符串传递给 document querySelector 并取回我选择的
  • “class boost::asio::async_result”中没有名为“completion_handler_type”的类型

    我正在尝试编写一个可以使用 boost spawn 调用的堆栈协程 协程内部启动一个线程 等待线程结束 并获取线程生成的一个整数值作为协程的返回值 但是 我遇到了一个错误 有专家可以帮我看一下吗 我的环境是 Ubuntu22 04 GCC9
  • 按日期获取维基百科修订 ID 的 API [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何API可以按日期获取维基百科修订ID 而不是检查所有修订历史记录并提取该日期之前的最新修订 谢谢你 The 修订查询 API允许您传递时间
  • 将带有 html 的字符串保存为图像

    我有一个包含网页中整个 html 的字符串 我想将此字符串保存为具有所有 html 规则的图像 最后有来自网页的图像 我该如何用c 和asp net解决这个问题 您可以使用以下组件将 HTML 文件转换为 PDF http code goo
  • Cython:创建数组抛出“常量表达式中不允许”

    我尝试将一个复杂的函数从 Python 重写为 Cython 以大幅加快速度 但遇到以下问题 在使用 hh vers vector pyx 编译函数时 setup ext modules cythonize hh vers vector p
  • Pushl %esp 是在存储之前还是之后更新 ESP?

    The pushlY86 指令将堆栈指针减 4 并将寄存器值写入内存 所以并不清楚处理器执行指令时应该做什么pushl esp 因为被压入的寄存器正在被同一指令更改 可能发生两种可能的事件 1 推入原值 esp 或 2 压入递减的值 esp
  • 使用 Mat OpenCV 访问像素

    我想使用 OpenCV 2 3 访问 RGB 像素 我正在尝试这样 但就像每个像素在帧后都是相等的 因为我没有输出 图像来自我的网络摄像头 我可以看到它们 顺便说一句 红色 0 THX Mat frame Mat oldFrame Vide
  • awk中的元编程,将文件转换为html表格格式

    我有以下文件 table txt 逗号分隔 1 Example Title COL1 COL2 COL3 COL4 COL5 BRCC ACGC 15869 105A 1 BCAS GAAG 73345 369T 2 模板 awk func
  • 如何有效地让“ParentFont = False”子控件使用与父控件相同的字体名称?

    大多数 VCL 控件都有Fonts and ParentFont财产 这是一个很好的做法ParentFont True并且字体将遵循其父字体Name Height and Color 这使得控件之间具有统一的视觉效果 但是 我们可能希望通过
  • 正则表达式匹配整行

    我是脚本编写新手 一直在阅读有关如何使用正则表达式的内容 我想获取与模式匹配的完整行 我的输出是 64 bytes from 33 33 33 33 icmp seq 9 ttl 254 time 1 011 ms 33 33 33 33
  • 使用 PHP DOMDocument 时 nextSibling 不起作用

    我尝试使用以下元素获取nextSibling并且以下代码不起作用 我有一个错误如下 PHP 警告 为 php dom php 第 35 行中的 foreach 提供的参数无效 这肯定是由 foreach 循环中的 null 值引起的 但如果
  • 某些提交中缺少 git-svn-id

    我有一个旧的 SVN 存储库 我使用它签出了git svn为了解决这个问题并推送到 Heroku 我做得相当标准git push heroku master git svn rebase git svn dcommit跳舞 一切都很好 然而
  • 数据操作 - 当值为字母数字时排序索引

    我想知道应该如何解决这种数据操作困境 在索引级别的值是字母数字的数据框中对多索引的索引进行排序的最佳方法是什么 这些值为 u 0 u 1 u 10 u 11 u 2 u 2Y u 3 u 3Y u 4 u 4Y u 5 u 5Y u 6 u
  • std::array 的推导指南

    我浏览了 C 模板独特指南 一书 并尝试了解其中的推导指南std array作品 关于标准的定义 声明如下 template
  • ServiceStack - 域和子域的身份验证

    我想将 ServiceStack 身份验证提供程序托管在域 domain com 的根目录上 并对整个域 sub1 domain com sub2 domain com 进行身份验证 是否可以替换默认实现ICookies用我自己的 这样我就
  • WCF请求/响应包大小

    我想知道是否有可配置的设置来限制 WCF 的最大请求 响应数据包大小 我正在使用 VSTS 2008 WCF 3 5 我将自托管 WCF 服务作为 Windows 服务 提前致谢 乔治 是的binding具有获取 设置最大接收数据字节的属性
  • 计算类方法中类类型的对象数量

    如何计算该类的方法中该类类型的对象数量 就此而言 如何在类之外执行此操作而不将对象添加到列表中 我早该想到的 谢谢 我将暂时搁置它 看看是否有更好的方法 因为我同意 我只是把我的头围绕着面向对象 如果您不介意让我多解释一下 也许总体上有更好