Я наблюдал неожиданное поведение свойства в одном из моих классов. Кажется, что получение свойства неявно вызывается, когда вы смотрите на внутренности во время отладки. Рассмотрим следующий пример:
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
Это ожидаемое поведение?