反射可以获得实例化对象的列表吗?
本文关键字:列表 对象 实例化 反射 | 更新日期: 2023-09-27 18:18:16
假设您有一个Shape类。假设Shape已经被实例化为圆形、正方形和三角形。是否有一种方法在运行时获得形状对象的名称列表,然后迭代这些对象?
无法使用反射来获取实例化对象列表。反射可以提供关于类型的信息,或者与你引用的对象交互,但它不能让你找到"所有创建过的这种类型的对象"。
您可以使用调试api来完成此操作。例如,在WinDbg + SOS:
!DumpHeap -type System.String -min 20000
我不建议这样做,但是跟踪您的形状的所有实例的一种方法是:
public abstract class Shape
{
private static readonly List<WeakReference<Shape>> allShapes = new List<WeakReference<Shape>>();
protected Shape()
{
allShapes.Add(new WeakReference<Shape>(this));
}
}
如果你需要这样做,你可能解决问题的方法是错误的。
感谢Vyrx的WeakReference
建议解决垃圾收集问题。