C# 反射能否获得实例化对象的列表?

C# 反射能否获得实例化对象的列表?,c#,reflection,C#,Reflection,假设您有一个类形状。假设形状已实例化为圆形、方形和三角形。是否有一种方法可以在运行时获取形状对象的名称列表,然后对这些对象进行迭代 无法使用反射来获取实例化对象的列表。反射可以提供有关类型的信息,也可以与您所引用的对象交互,但它不允许您找到“所有创建过的此类型对象” 您可以使用dubugging API来实现这一点。即: 我不建议这样做,但跟踪形状的所有实例的一种方法是执行以下操作: public abstract class Shape { private static readonl

假设您有一个类形状。假设形状已实例化为圆形、方形和三角形。是否有一种方法可以在运行时获取形状对象的名称列表,然后对这些对象进行迭代

无法使用反射来获取实例化对象的列表。反射可以提供有关类型的信息,也可以与您所引用的对象交互,但它不允许您找到“所有创建过的此类型对象”

您可以使用dubugging API来实现这一点。即:


我不建议这样做,但跟踪形状的所有实例的一种方法是执行以下操作:

public abstract class Shape
{
    private static readonly List<WeakReference<Shape>> allShapes = new List<WeakReference<Shape>>();

    protected Shape()
    {
        allShapes.Add(new WeakReference<Shape>(this));
    }
}
公共抽象类形状
{
私有静态只读列表allShapes=new List();
保护形状()
{
添加(新WeakReference(this));
}
}
如果你需要这样做,你可能正在解决你的问题


感谢您提出的解决垃圾收集问题的
WeakReference
建议。

您指的是变量名吗?如果您需要跟踪对象引用(即实例),为什么不使用类似
List
?(在您的示例中,
List
可能包含圆形、正方形、三角形)您可以尝试GetType();您是否询问如何查找所有派生类型,或者如何查找此类类型的所有实例化对象?如果您的意思是如何查找所有派生类型-。如果您指的是如何找到此类类型的所有实例化对象-。您可以使用列表代替。
WeakReference
不是通用的。所以你需要
WeakReference
而不是
WeakReference
是的,它是…-。净额4.5
public abstract class Shape
{
    private static readonly List<WeakReference<Shape>> allShapes = new List<WeakReference<Shape>>();

    protected Shape()
    {
        allShapes.Add(new WeakReference<Shape>(this));
    }
}