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

Jam*_*xon 1 c#

我只是在 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*son 5

这是我对属性所做的第一件事:)——你递归地调用 y 设置器而不是设置支持字段。由于它调用了自己,最终会出现stackoverflow。

每个 setter 都是语法糖,基本上是一个方法调用。您所做的基本上等同于使用方法执行此操作:

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