设置静态属性C#时出现堆栈溢出异常

时间:2012-11-19 13:33:57

标签: c# properties static set stack-overflow

  

可能重复:
  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
}

我做错了什么?

2 个答案:

答案 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;
    }
}