调试时如何评估全局方法和字段?

时间:2018-05-12 21:01:36

标签: .net visual-studio cil

通过CIL编辑,人们可以添加不属于任何类或命名空间的方法和字段。

在程序集中,有一个类internal class <Module>,它包含所有这些全局变量。 可以使用IL工具(Mono.Cecil,dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。

有没有办法在Visual Studio中评估或查看调试中的值?

1 个答案:

答案 0 :(得分:0)

最简单的方法是只有一个public static class Globals并将所有全局变量存储在那里。

然后,在所有文件中,您执行using static Globals。 (如果命名空间中存在Globals,则必须使用它的全名)。 using static <ClassName>让你使用所有静态字段和方法而不必指定类,使它看起来像属于当前类,或者像它们是全局变量,例如:

public static class Globals
{
    public int GlobalInt { get; set; } = 42;
    public int GlobalMethod() => 42;
}

没有using static

public void Main(string[] args)
{
    Console.WriteLine(Globals.GlobalInt);
    Console.WriteLine(Globals.GlobalMethod);
}

使用using static

using static Globals;

public void Main(string[] args)
{
    Console.WriteLine(GlobalInt);
    Console.WriteLine(Globals.GlobalMethod);
}

话虽这么说,使用全局变量通常被认为是不好的做法(因此C#没有它们),因为任何类都可以改变它的值,并且它很容易松散。但是,全局常量,全局只读或具有私有设置器的全局属性都可以。