一个班级是否有可能了解反思是否已被用于自身?

End*_*ves 2 c# reflection

类X使用反射方法来检查类Y是否具有特定方法.是否有任何方法让Y类找出类X正在检查的方法的细节?

Jay*_*Jay 5

对Type定义而不是实例执行反射.

该实例用于在需要时检索值,并且仅是值的存储位置,Type定义是此存储区域的映射.

因此,无法指示是否已在实例上使用了反射...可以确定最近是否已对类型执行了反射(在最后一次垃圾收集器运行之前,认为反映反射)但是切线最好不是在这里进一步探讨,因为它仍然没有解决你想要实现的问题.

当CLR执行反射时,它会这样做,不会留下任何已执行反射的痕迹,除了与执行反射相关的内存成本.

如果不修改CLR,就不可能留下任何此类指示.

解决此问题的另一种方法是提供一个反射缓存,它将类型信息存储在Dictionary中,这将允许您确定是否已反映特定类型,然后使用Dictionary中的信息,而不是再次执行反射.

请参阅如何在C#中拦截方法调用?