【发布时间】:2018-05-12 21:01:36
【问题描述】:
通过 CIL 编辑,人们可以添加不属于任何类或命名空间的方法和字段。
在程序集中,有一个类internal class <Module>,它包含所有这些全局变量。
可以使用 IL 工具(Mono.Cecil、dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。
有没有办法在 Visual Studio 中评估或查看调试值?
【问题讨论】:
标签: .net visual-studio cil
通过 CIL 编辑,人们可以添加不属于任何类或命名空间的方法和字段。
在程序集中,有一个类internal class <Module>,它包含所有这些全局变量。
可以使用 IL 工具(Mono.Cecil、dnlib)或反编译工具(dnSpy)查看这些方法代码和字段。
有没有办法在 Visual Studio 中评估或查看调试值?
【问题讨论】:
标签: .net visual-studio cil
最简单的方法是使用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# 没有它们),因为任何类都可以更改它的值并且很容易丢失跟踪。但是,全局常量、全局只读或具有私有设置器的全局属性都可以。
【讨论】: