-2

可能重复:
C# 新手,为什么 Property Set 会抛出 StackOverflow 异常?

尝试设置静态属性时出现堆栈溢出异常。

public static class StaticTest
{
   static string stringToSet
   {
      get
      {                
          return stringToSet;
      }
      set
      {
          stringToSet = value;
      }
   }
}

然后,在其他班级:

public void setStaticProperty()
{
    StaticTest.stringToSet = "Hello World";    // StackOverflow exception here
}

我做错了什么?

4

2 回答 2

9
  set
  {
      stringToSet = value;
  }

你在你的 setter (和 getter )中得到了无限递归,因为它调用了自己,因此 StackOverflow。

如果您不需要直接修改基础字段,请改用自动属性:

static string stringToSet {get; set;}
于 2012-11-19T13:35:55.673 回答
4

在您的静态属性设置器中,您正在为静态属性分配一个值stringToSet,它调用您的静态属性设置器,您在其中为静态属性分配一个值stringToSet,它调用您的静态属性设置器,您在其中为静态分配一个值property stringToSet,它调用您的静态属性设置器,您在其中为静态属性分配一个值stringToSet...

您需要添加一个私有字段来存储属性值;通常您会重命名该属性,使其以大写字母 ( StringToSet) 开头。

private string stringToSet;

public string StringToSet {
    get {
        return stringToSet;
    }
    set {
        stringToSet = value;
    }
}
于 2012-11-19T13:36:35.480 回答