通过CIL编辑,人们可以添加不属于任何类或命名空间的方法和字段。
在程序集中,有一个类internal class <Module>,它包含所有这些全局变量。可以使用IL工具(Mono.Cecil、dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。
有没有办法在Visual Studio中评估或查看调试中的值?
发布于 2018-05-13 11:37:02
要做到这一点,最简单的方法是只有一个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#没有它们),因为任何类都可以更改它的值,而且很容易松散跟踪。但是,全局常量、全局readonlys或带有私有setter的全局属性都很好。
https://stackoverflow.com/questions/50310638
复制相似问题