Как оценить глобальные методы и поля при отладке? - PullRequest
0 голосов
/ 13 мая 2018

Путем редактирования CIL люди могут добавлять методы и поля, которые не принадлежат ни к какому классу или пространству имен.

В сборке существует класс internal class <Module>, который содержит все эти глобальные переменные.Можно просмотреть коды и поля этих методов с помощью инструментов IL (Mono.Cecil, dnlib) или инструментов декомпиляции (dnSpy).

Есть ли способ оценки или просмотра значения при отладке в Visual Studio

1 Ответ

0 голосов
/ 13 мая 2018

Самый простой способ сделать это - просто иметь 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 или глобальными свойствами с частными установщиками все в порядке.

...