是否可能显示所有方法及其访问修饰符?

3

我正在对一些大型类库进行代码审查,想知道是否有一种简单易行的方法来生成所有方法(以及可能的属性/变量)及其访问修饰符的列表。例如,我希望得到像这样的内容:

private MyClass.Method1()
internal MyClass.Method2()
public MyOtherClass.Method1()

这类似于C++的头文件,但是针对C#。这将把所有内容放在一个地方以便快速查看,然后我们可以调查一些方法是否真的需要标记为内部/公共。

6个回答

10

是的,使用反射:

foreach (Type type in assembly.GetTypes())
{
    foreach (MethodInfo method in type.GetMethods(BindingFlags.Public |
        BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance))
    {
        Console.WriteLine("{0} {1}{2}.{3}", GetFriendlyAccess(method),
            method.IsStatic ? "static " : "", type.Name, method.Name);
    }
}

我会把 GetFriendlyAccessName 留给读者作为练习 - 使用 IsFamily、 IsPrivate、 IsPublic、 IsProtected 等或 Attributes 属性。


1

嗯,你可以使用反射来枚举方法。


1

Exuberant ctags有一个适用于C#的模式,而且很容易使用。话虽如此,我只会反射程序集。


1

有一些工具可以使用,比如Reflector


0
.Net Reflector或ildasm。
如果你要求它导出,ildasm将会为你生成一个很好的文件,但只会要求特定的成员。
NDepends也可以做到这一点(而且更灵活),但是商业使用需要付费。

0
如果您正在使用Visual Studio,那么您总是可以获得该视图。
只需使用“转到定义”选项,Visual Studio就会在新标签页中打开类型元数据(如果您使用的是DLL而不是直接使用源代码)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接