Ответ 1
Одной из приятных особенностей Immediate Window в Visual Studio является ее способность оценивать возвращаемое значение метода, особенно если оно вызывается вашим клиентским кодом, но оно не является частью назначения переменной. В режиме отладки, как уже упоминалось, вы можете взаимодействовать с переменными и выполнять выражения в памяти, которые играют важную роль в возможности сделать это.
Например, если у вас есть статический метод, который возвращает сумму двух чисел, таких как:
private static int GetSum(int a, int b)
{
return a + b;
}
Затем в окне Immediate вы можете ввести следующее:
? GetSum(2, 4)
6
Как вы можете видеть, это работает очень хорошо для статических методов. Однако, если метод нестатический, вам необходимо взаимодействовать со ссылкой на объект, к которому принадлежит метод.
Например, скажем, это выглядит так:
private class Foo
{
public string GetMessage()
{
return "hello";
}
}
Если объект уже существует в памяти и его в области видимости, вы можете вызвать его в окне Immediate, если оно было создано до вашей текущей точки останова (или, по крайней мере, до того, где код приостанавливается в режиме отладки ):
? foo.GetMessage(); // object ‘foo’ already exists
"hello"
Кроме того, если вы хотите напрямую взаимодействовать и протестировать метод, не полагаясь на существующий экземпляр в памяти, вы можете создать экземпляр своего экземпляра в окне Immediate:
? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"
Вы можете сделать еще один шаг и временно присвоить результаты метода переменным, если вы хотите выполнить дальнейшие оценки, вычисления и т.д.:
? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"
Кроме того, если вы даже не хотите объявлять имя переменной для нового объекта и просто хотите запустить один из своих методов/функций, сделайте следующее:
? new Foo().GetMessage()
"hello"
Очень распространенный способ увидеть значение метода - выбрать имя метода для класса и сделать "Add Watch", чтобы вы могли видеть его текущее значение в окне "Смотреть". Тем не менее, еще раз, объект должен быть создан и доступен для видимого значения. Это гораздо менее мощное и более ограничительное, чем использование окна "Немедленное".
Наряду с методами проверки вы можете выполнять простые математические уравнения:
? 5 * 6
30
или сравнить значения:
? 5==6
false
? 6==6
true
Вопросительный знак ('?') не нужен, если вы находитесь непосредственно в окне Immediate, но он включен здесь для ясности (чтобы различать типизированные выражения в сравнении с результатами). Однако, если вы находитесь в команде Окно и нужно сделать некоторые быстрые вещи в окне "Немедленное окно", а затем перед вашими заявлениями "?" и вы уходите.
Intellisense работает в окне Immediate Window, но иногда это может быть немного непоследовательным. По моему опыту, он, кажется, доступен только в режиме отладки, но не в режиме проектирования, не отладки.
К сожалению, еще один недостаток окна Immediate - то, что он не поддерживает циклы.