测量一个类中的方法数

时间:2012-03-10 11:20:44

标签: .net

我应该计算任何.NET程序类中的方法数。为此,我正在利用该特定程序的il。最初我以为我会计算il中“ret”的数量。但后来我发现甚至方法声明都包含“ret”关键字。然后我试着和“callvirt”一起去。但这并不适用于所有情况。现在我在考虑这样的事情: -

计算以下内容出现在il中的次数: - 方法class_name :: method_name

的结尾

但我不知道如何实现这个(我是.NET的完全新手)

您能否建议另一种方法来利用il?

来识别班级中的方法

3 个答案:

答案 0 :(得分:2)

我的首选方法:

方法1:
将程序集加载到AppDomain中并使用反射。这会从程序集中执行代码(即它不应该是邪恶的),并且它的依赖项也必须是可解析的。

方法2:
将包含该类的程序集加载到Mono.Cecil中,然后使用其API枚举方法。

选择哪两个取决于上下文。如果您已加载/将加载程序集,则使用反射。如果您只想分析程序集文件,请使用Mono.Cecil。

其他方法:

方法3:
使用CCI,我对此没有经验。看起来与Mono.Cecil类似。

方法4:
使用仅反射装配加载反射。我发现这个很痛苦,建议不要使用它。

答案 1 :(得分:0)

两种方法:

//with an instance of the class
var instance = new YourClass();
var methods = instance.GetType().GetMethods();
var count = methods.Length;

//using the type of the class (no instance)
var classType = typeof(YourClass);
var methods = classType.GetMethods();
var count = methods.Length;

我已经通过几个步骤编写了这篇文章,以使其易于理解。当然你可以把它写成一行。例如,第二种方法如下所示:

var count = typeof(YourClass).GetMethods().Length;

希望这有帮助! :)

答案 2 :(得分:0)

当你在谈论IL时,我假设你想要计算编译汇编中的方法数。

您可以加载.Net程序集,然后使用反射来检索所有方法。

请参阅Get class methods using reflection