我们需要获得实现给定接口的所有对象实例 - 我们可以这样做,如果是这样的话,怎么做?
如果您需要实现特定接口的所有类型的实例(示例),您可以浏览所有类型,检查接口并在找到匹配时创建实例.
这里有一些看起来非常像C#的伪代码,甚至可以编译并返回你需要的东西.如果没有别的,它会指出你正确的方向:
public static IEnumerableGetInstancesOfImplementingTypes () { AppDomain app = AppDomain.CurrentDomain; Assembly[] ass = app.GetAssemblies(); Type[] types; Type targetType = typeof(T); foreach (Assembly a in ass) { types = a.GetTypes(); foreach (Type t in types) { if (t.IsInterface) continue; if (t.IsAbstract) continue; foreach (Type iface in t.GetInterfaces()) { if (!iface.Equals(targetType)) continue; yield return (T) Activator.CreateInstance(t); break; } } } }
现在,如果你在谈论走堆并返回实现特定的类型,在运气好,因为这种信息不被.NET运行时存储的所有对象的前面实例化的实例(可通过debugers /分析器通过检查堆计算/ stack so).
根据您认为您需要这样做的原因,可能有更好的方法来实现它.
我不相信有一种方法......您必须要么能够遍历堆,并检查那里的每个对象,或者在应用程序进程空间中遍历每个活动线程的堆栈,检查每个堆栈引用变量每个线程......
另一种方式,(我猜你做不到)拦截所有对象创建活动(使用容器方法)并保留应用程序中所有对象的列表...