可能重复:
New to C#, why does Property Set throw StackOverflow exception?
当我尝试设置静态属性时,我收到了堆栈溢出异常。
public static class StaticTest
{
static string stringToSet
{
get
{
return stringToSet;
}
set
{
stringToSet = value;
}
}
}
然后,在其他课程中:
public void setStaticProperty()
{
StaticTest.stringToSet = "Hello World"; // StackOverflow exception here
}
我做错了什么?
答案 0 :(得分:8)
set
{
stringToSet = value;
}
你的setter中有无限递归(并且就此而言是getter),因为它调用自身,因此StackOverflow。
如果您不需要直接修改基础字段,请改为使用自动属性:
static string stringToSet {get; set;}
答案 1 :(得分:3)
在静态属性设置器中,您要为静态属性stringToSet
分配一个值,该属性调用静态属性设置器,您可以在其中为静态属性stringToSet
分配一个值,该属性调用您的static property setter,您为静态属性stringToSet
赋值,该属性调用静态属性setter,您将为静态属性stringToSet
赋值...
您需要添加私有字段来存储属性值;通常你会将属性重命名为以大写字母(StringToSet
)开头。
private string stringToSet;
public string StringToSet {
get {
return stringToSet;
}
set {
stringToSet = value;
}
}