Вызывается ли свойство get неявно при просмотре объекта во время отладки? - PullRequest
1 голос
/ 06 мая 2020

Я наблюдал неожиданное поведение свойства в одном из моих классов. Кажется, что получение свойства неявно вызывается, когда вы смотрите на внутренности во время отладки. Рассмотрим следующий пример:

public class ClassWithProperty
{
    public ClassWithProperty() {}

    public bool _initialFalseFlag = false;
    public bool Flag
    {
        get
        {
            _initialFalseFlag = !_initialFalseFlag;

            return _initialFalseFlag;
        }
    }
}

static void Main(string[] args)
{
    ClassWithProperty cls = new ClassWithProperty(); 
}

Если я установил точку останова в строке, где ClassWithProperty инициализирован в программе, я вижу, что _initialFalseFlag равно true. Однако свойство Flag никогда не вызывается.

Это становится еще более странным, когда я вставляю несколько операторов печати. Если я запустил следующие строки, я получу ожидаемый результат: False, True, False. Если я, тем не менее, установил точку останова в строке 2, где я печатаю cls._initialFalseFlag, а затем в Visual Studio разверну переменную cls, а затем продолжу выполнение кода, который я получу как результат True, True, True.

ClassWithProperty cls = new ClassWithProperty(); 
System.Diagnostics.Debug.WriteLine(cls._initialFalseFlag); // Should return false
System.Diagnostics.Debug.WriteLine(cls.Flag); // Should return true
System.Diagnostics.Debug.WriteLine(cls.Flag); // Should return false

Это ожидаемое поведение?

1 Ответ

1 голос
/ 06 мая 2020

Я верю, что это так. У меня тоже были проблемы с этим в прошлом, и мне повезло с его отключением, перейдя в Параметры> Отладка> Общие> «Снимите флажок Включить оценку свойств и другие неявные вызовы функций». Он не покажет вам значение свойства, если вы отлаживаете, но вы, по крайней мере, можете увидеть, как это меняет ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...