我在不同的程序集中有A类和B类,我需要知道的是,是否有办法通过反射来获取B类方法中方法A.foo()的用法。我读过那可能是IL?
感谢您的帮助。
答案 0 :(得分:2)
不,你不能用反射做到这一点。反射基于对象的元数据;他们公开的公共API。他们的内部实现根本无法通过反思来访问。
答案 1 :(得分:0)
您可以使用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
我实际上写了一篇关于这个here的文章。
答案 2 :(得分:0)
您是否考虑过使用Nitriq或NDepend等代码分析工具?在NDepend的Code Query over LINQ中,它会像以下一样简单:
from t in Types
where t.IsUsing ("ClassLibrary1.A.Foo()")
select new { t }
如果您在运行时确实需要此类信息,那么NDepend.API可用,您可以在那里使用CQLinq。但如果我是你,我会重新考虑为什么我想在运行时找到这样的信息......