【发布时间】:2019-04-10 18:14:40
【问题描述】:
我正在使用 ILSpy 反编译 .Net 的程序集并查看代码。当我在WindowsBase.dll 中浏览System.Windows.Vector.AngleBetween(Vector, Vector) 的代码时,我偶然发现了一些奇怪的东西。
这是函数的完整代码:
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 所做的似乎是不可能的。
注意:即使“使用调试符号中的变量名(如果可用)”和“显示调试符号中的信息(如果可用)”,也会出现此行为 设置中的选项未选中。
【问题讨论】:
-
可能 ILSpy 只知道常见常量(如
Math.PI)的值。
标签: c# decompiling compile-time-constant ilspy