我想获取特定类型的所有实例。最好在没有所有实例的列表的情况下找到它们。我只找到了解释如何找到接口实现的解决方案。 Reflection 是否提供任何方法来实现这一目标?
答案很简单:不,原则上你不能使用Reflection来开发这样的方法。
我可以解释为什么不。反思是一种静态分析。它基于每个程序集静态已知的元数据。 (不过,我不谈论
System.Reflection.Emit
,情况几乎相反。)
对于您的类型的实例,它们通常是非静态易失性对象:此时某个对象存在,稍后它就消失了。至于引用类型对象,当代码无法访问引用时,垃圾收集器将丢弃它们。此外,如果当前堆栈上有一个类型引用,您通过堆栈变量访问该对象,则从当前方法返回时会失去访问权限,然后该对象将在您无法控制的某个时间被垃圾收集.
对于值类型对象,它们不会存储在堆中,也不会被破坏,但非静态对象始终存储在堆栈中,并且在
return
之后离开当前堆栈帧后会丢失它们。反思与所有这些东西完全无关。
所以,有争议的答案是:不。