奇怪的执行c#中的get访问器?

时间:2011-01-09 22:51:57

标签: c# get

我设置了一个简单的程序,只是为了测试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 个答案:

答案 0 :(得分:10)

如果我不得不猜测,我会说调试器运行一次以在IDE中显示局部变量的成员。

如果您在属性中有副作用(您不应该这样做),请不要在IDE中运行它:)

在控制台试试;它应该在那里表现出来。

答案 1 :(得分:8)

没有重复。

不要写有副作用的吸气剂。