Я использую ILSpy для декомпиляции сборок .Net и просмотра кода. Просматривая код 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 говорит о константах в C #:
Фактически, когда компилятор встречает постоянный идентификатор в исходном коде C #, он подставляет буквенное значение непосредственно в код промежуточного языка (IL), который он создает.
Исходя из этого, то, что сделал ILSpy, кажется невозможным.
Примечание: это поведение присутствует, даже если «Использовать имена переменных из символов отладки, если они доступны» и «Показать информацию из символов отладки, если они доступны»
опции не отмечены в настройках.