从公共实例属性返回静态属性的值

时间:2010-04-18 19:02:20

标签: c# linqpad

我刚刚在LINQPad中使用了一些代码,并设法使用stackoverflow异常使程序崩溃。

我基本上在字段中创建了一个静态属性,并使用一个属性从实例返回值。

我的实例属性的getter将返回静态字段的值,但setter会自行设置。何时使用这种类型的模式以及它如何生成stackoverflow异常?

我所做的代码示例:

void Main()
{
    SomeClass myinstance = new SomeClass();
    SomeClass.x = "Some Value";
    myinstance.y = "Some other value";
    myinstance.y.Dump();
}

public class SomeClass
{
    public static string x;

    public string y
    {
        get { return x; }
        set { y = value; }
    }
}

2 个答案:

答案 0 :(得分:4)

这是我用属性做的第一件事:) - 你递归调用y setter而不是设置一个支持字段。因为它自称,它最终将stackoverflow。

每个setter都是语法糖,基本上是一个方法调用。你所做的基本上等同于用一种方法做到这一点:

public class SomeClass
{
   public string GetValue() { return "some string"; }
   public void SetValue(string arg)
   { 
       SetValue(arg); // recursively calls itself until stackoverflow
   }
}

答案 1 :(得分:1)

您在setter中写了y = value;而不是x = value;

请注意,对于简单属性,您可以使用

public string y { get; set; }

会自动生成隐藏字段。