在C#中,为什么可以将属性设置为其自身

Val*_*roM 5 c# syntax properties

偶然我在工作中创建了一个错误。该错误的原因是一段C#代码,例如

public ClassA{
        public string AProperty
        {
            get
            {
                return AProperty;
            }
            set
            {
                AProperty = value;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

您可以构建它,并且可以毫无例外地运行它。但是它将创建一个无限循环。例如,在设置AProperty时,它总是尝试将值分配给自己。

谁知道为什么在C#中编译器会允许这种语法?

Ser*_*rvy 4

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

即使是最微不足道的测试也能得出这样的结论。这不是一个非常微妙的错误,如果开发人员被它咬了几次,他们就会学会寻找它。