2

X 类使用反射方法来检查 Y 类是否具有特定方法。Y 类有没有办法找出 X 类正在检查的方法的详细信息?

4

2 回答 2

5

反射是在类型定义而不是实例上执行的。

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

因此,无法指示是否已在实例上使用反射...可以确定最近是否已对类型执行反射(在最后一次垃圾收集器运行之前,请考虑反射反射)但是切线最好不要在这里进一步探索,因为它仍然不能解决您打算实现的问题。

当 CLR 执行反射时,它不会留下任何已执行反射的痕迹,从而节省与执行反射相关的内存成本。

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

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

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

于 2013-03-11T14:43:02.747 回答
2

类 Y 可以知道类 X 反映它的唯一方法是类 X 是否通过调用方法或设置或获取属性的值以某种方式让类 Y 知道。所以直接的答案是否定的。

于 2013-03-11T14:37:07.883 回答