【问题标题】:Is there any command that allows me to check if any class has objects created from it? [closed]是否有任何命令可以让我检查是否有任何类具有从中创建的对象? [关闭]
【发布时间】:2019-10-12 10:59:47
【问题描述】:

所以,我正在编写一些练习代码,并且我已经到了想要创建一个函数的地步,我可以在其中检查一个类以查找由它创建的对象,然后能够使用这些方法和/或我写在对象上的数据字段

比如,让我用一个直截了当的例子

Dog.CheckForObjectsOfSameClass();

我尝试使用静态数字来引用然后引用此类数据的父级,但我也找不到相应的命令。

我会发布我之前尝试使用的代码,但这只会让这变得更加混乱。

提前感谢任何可以帮助我解决这个疑问的答案

【问题讨论】:

  • 欢迎来到 Stack Overflow。不清楚您在问什么,甚至听起来像是 XY 问题。请edit您的问题包括您拥有的源代码,甚至可以作为minimal reproducible example。解释您要归档的内容以及确切的问题。
  • 我已经多次阅读您的问题,但我仍然不知道您要做什么。不幸的是,blut 示例 根本没有帮助。 “检查一个类以查找由它制成的对象” 是什么意思?
  • 通过检查一个类是否有由它制成的对象,我就像是否有一个命令可以检查它被调用的程序是否由可能位于项目文件中其他位置的特定类制成的对象.比如,检查冰箱里的苹果。您不是在寻找某个特定的苹果,而只是在寻找是否有苹果
  • @legitPoodros 当您想以某种方式在堆中查找创建的对象时,可以检查stackoverflow.com/questions/2262620/…stackoverflow.com/questions/1384228/…。另请参阅给出的答案的参考链接/文章/问题。
  • 正如 Progman 提到的,这听起来像是一个 XY 问题(您已经确定了一种解决问题的方法,即使很难解释也可能是错误的方法)。在这种特定情况下,跟踪“存在于项目其他地方”的对象可能会干扰对象的生命周期和垃圾回收。你到底想做什么?

标签: c#


【解决方案1】:

听起来您要求的是内置 reference counting 之类的东西。除了garbage collector,语言中没有类似的东西,在我看来,仅仅为了编写正常的应用程序代码而尝试挂钩垃圾收集器将是一件非常奇怪、疯狂和可怕的事情。

正如其中一位 cmets 所暗示的,这听起来像是 XY problem,真正的解决方案是理解为什么持有对您想要访问的对象的引用是困难的,并更改您的编码方法以更直截了当的方式。根据您要执行的操作,将新创建的对象添加到 dictionary

var dogs = new Dictionary<string, Dog>(); var rover = new Dog(); dogs.Add("rover", rover);

使用有意义的键来区分哪个对象是哪个,可能是解决问题的一种方式。

【讨论】:

  • “在我看来,仅仅为了编写正常的应用程序代码而尝试挂钩垃圾收集器将是一件非常奇怪、疯狂和可怕的事情” 同意 - 特别是因为使用以这种方式获取的对象会严重干扰垃圾收集。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2010-11-10
  • 2013-03-30
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多