在c#中,为什么你可以将一个属性设置为它自己

本文关键字:一个 属性 它自己 设置 为什么 | 更新日期: 2023-09-27 18:09:59

我不小心在我的工作中创建了一个错误。这个bug的原因是一段c#代码,比如

public ClassA{
        public string AProperty
        {
            get
            {
                return AProperty;
            }
            set
            {
                AProperty = value;
            }
        }
}

你可以构建它,并运行它而没有任何异常。但它会产生一个无限循环。例如,在设置AProperty时,它总是尝试将值赋给它自己。

有人知道为什么在c#中编译器会允许这种语法吗?

在c#中,为什么你可以将一个属性设置为它自己

因为c#编译器团队并没有决定将这种情况定为非法。可能是因为他们没有考虑到实现它的好处大于成本。

即使是最琐碎的测试也会出现;这不是一个非常微妙的错误,如果开发人员被它咬了几次,就会学会寻找它。