Странное выполнение get-аксессора в c #? - PullRequest
4 голосов
/ 10 января 2011

Я настроил простую программу, чтобы просто проверить, как выполняется код внутри метода доступа get (поскольку у меня были некоторые проблемы в другом проекте), и обнаружил нечто довольно странное:

class Program {
    static void Main(string[] args) {
        var test = new TestClass();
        var testBool = test.TestBool;
    }
}

public class TestClass {
    private bool _testBool = true;
    public bool TestBool {
        get {
            if (_testBool) {
                Console.WriteLine("true!");
            } else {
                Console.WriteLine("false! WTF!");
            }
            _testBool = false;
            return _testBool;
        }
    }
}

Я ожидал, что результат будет

верно!

Но вместо этого я получил

верно!

ложь! WTF!

Что здесь происходит?

Ответы [ 2 ]

10 голосов
/ 10 января 2011

Если бы мне пришлось угадывать, я бы сказал, что отладчик запустил его один раз, чтобы показать элементы локальной переменной в IDE.

Если у вас есть побочные эффекты в свойствах (которых у вас нет), не запускайте их в IDE:)

Попробуйте в консоли; он должен вести себя там сам.

8 голосов
/ 10 января 2011

Нет репр.

И не пишите геттеры с побочными эффектами.

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