我应该计算任何.NET程序类中的方法数。为此,我正在利用该特定程序的il。最初我以为我会计算il中“ret”的数量。但后来我发现甚至方法声明都包含“ret”关键字。然后我试着和“callvirt”一起去。但这并不适用于所有情况。现在我在考虑这样的事情: -
计算以下内容出现在il中的次数: - 方法class_name :: method_name
的结尾但我不知道如何实现这个(我是.NET的完全新手)
您能否建议另一种方法来利用il?
来识别班级中的方法答案 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)