通过CIL编辑,人们可以添加不属于任何类或命名空间的方法和字段。
在程序集中,有一个类internal class <Module>
,它包含所有这些全局变量。
可以使用IL工具(Mono.Cecil,dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。
有没有办法在Visual Studio中评估或查看调试中的值?
答案 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#没有它们),因为任何类都可以改变它的值,并且它很容易松散。但是,全局常量,全局只读或具有私有设置器的全局属性都可以。