我在我的嵌套类中在属性C#的set函数上遇到StackOverflowException错误

Nik*_*sic 3 c# stack-overflow nested-class

public class Class1
    {
        public Class1()
        {
            prop = new Class2();
        }
        public Class2 prop { get; set; }

        public class Class2
        {
            public Class2()
            {
                this.prop2 = "nikola";
            }

            public string prop2 { get { return prop2; } set { prop2 = EditString(value); } }

            public string EditString(string str)
            {
                str += " plavsic";
                return str;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的代码,我有问题.当我尝试初始化类型为Class1的对象时,它会抛出StackOverflowException错误.我究竟做错了什么?

SLa*_*aks 9

你的财产正在自行设定.

prop2 = ...属性setter中的行调用属性setter,它再次调用自身,再次调用自身,再次调用自身,再次调用自身,再次调用自身,再次调用自身,再次调用自身,再调用自身,它再次自我调用,它再次调用自身,它再次调用自身,再次调用自身,再次调用自身,再次调用自身,再次调用自身,再次调用自身,再调用自身,再调用自身,再次自称...

除了你从不称呼它之外,getter做同样的事情.

您需要为要获取和设置的属性创建一个支持字段.

例如:

private string prop2; //Create a backing field
public string Prop2 {
    get { return prop2; }
    set { prop2 = EditString(value); }
}
Run Code Online (Sandbox Code Playgroud)

  • 不能说我的堆栈大小给我留下了深刻的印象. (2认同)