假设你有一个类Shape。假设Shape已被实例化为Circle,Square和Triangle。有没有办法在运行时获取Shape对象的名称列表,然后迭代这些对象?
答案 0 :(得分:5)
无法使用反射来获取实例化对象的列表。反射可以提供有关类型的信息或与您引用的对象进行交互,它不会让您找到"此类型的所有对象都已创建"。
您可以使用dubugging API来执行此操作。即在WinDbg + SOS中:
!DumpHeap -type System.String -min 20000
答案 1 :(得分:2)
我不建议这样做,但跟踪形状的所有实例的一种方法是执行以下操作:
public abstract class Shape
{
private static readonly List<WeakReference<Shape>> allShapes = new List<WeakReference<Shape>>();
protected Shape()
{
allShapes.Add(new WeakReference<Shape>(this));
}
}
如果您需要这样做,您可能正在解决问题the wrong way。
感谢Vyrx提出解决垃圾收集问题的WeakReference
建议。