3

我在不同的程序集中有 A 类和 B 类,我需要知道的是是否有办法通过反射在 B 类的方法中获取方法 A.foo() 的用法。我读过这可能与IL?

谢谢您的帮助。

4

3 回答 3

2

不,你不能通过反射来做到这一点。反射是基于对象的元数据;他们公开的公共 API。它们的内部实现根本无法通过反射访问。

于 2013-11-14T22:06:44.617 回答
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

我实际上在这里写了一篇关于这个的文章。

于 2013-11-14T22:09:15.217 回答
0

您是否考虑过使用 Nitriq 或 NDepend 等代码分析工具?在 NDepend 的LINQ 代码查询中,它很简单:

from t in Types 
where t.IsUsing ("ClassLibrary1.A.Foo()")
select new { t }

如果您在运行时确实需要此类信息,可以使用NDepend.API,您可以在那里使用 CQLinq。但如果我是你,我会重新考虑为什么我想在运行时找到这样的信息......

于 2013-11-14T23:47:51.137 回答