我正在使用 ILSpy 反编译 .Net 的程序集并查看代码。当我浏览 in 的代码时System.Windows.Vector.AngleBetween(Vector, Vector)
,WindowsBase.dll
我偶然发现了一些奇怪的东西。
这是函数的完整代码:
public static double AngleBetween(Vector vector1, Vector vector2)
{
double y = vector1._x * vector2._y - vector2._x * vector1._y;
double x = vector1._x * vector2._x + vector1._y * vector2._y;
return Math.Atan2(y, x) * (180.0 / Math.PI);
}
显然 ILSpy 可以识别Math.PI
,这是一个常数。
这是Microsoft Docs关于 C# 中的常量的说法:
事实上,当编译器在 C# 源代码中遇到常量标识符时,它会将文字值直接替换为它生成的中间语言 (IL) 代码。
基于此,ILSpy 所做的似乎是不可能的。
注意:即使在设置中未选中“使用调试符号中的变量名,如果可用”和“显示调试符号中的信息,如果可用”选项,也会出现此行为。