我在不同的程序集中有 A 类和 B 类,我需要知道的是是否有办法通过反射在 B 类的方法中获取方法 A.foo() 的用法。我读过这可能与IL?
谢谢您的帮助。
不,你不能通过反射来做到这一点。反射是基于对象的元数据;他们公开的公共 API。它们的内部实现根本无法通过反射访问。
您可以使用方法读取方法主体GetMethodBody()
。然后你自己去寻找用途。我正在创建一个示例...
此示例可能会有所帮助:
Assembly assembly = Assembly
.GetAssembly(typeof(B));
List<Type> types = assembly.GetTypes().ToList();
Type controller = types
.Where(t => t.Name == "a-class-name")
.Single();
List<MethodInfo> methods = controller
.GetMethods().ToList();
MethodInfo method = methods
.Where(m => m.Name == "a-method-name")
.First();
MethodBody body = method
.GetMethodBody();
// Search body.LocalVariables
我实际上在这里写了一篇关于这个的文章。
您是否考虑过使用 Nitriq 或 NDepend 等代码分析工具?在 NDepend 的LINQ 代码查询中,它很简单:
from t in Types
where t.IsUsing ("ClassLibrary1.A.Foo()")
select new { t }
如果您在运行时确实需要此类信息,可以使用NDepend.API,您可以在那里使用 CQLinq。但如果我是你,我会重新考虑为什么我想在运行时找到这样的信息......