为什么设置静态方法会导致堆栈溢出?

Spe*_*edy 1 .net c# static

如果我使用set访问器更改C#中的静态类成员,为什么会出现堆栈溢出错误?

我并不认为这是一个错误,我只是想知道机器内部究竟发生了什么.

Mar*_*ell 46

你不应该; 我希望你有类似的东西:

private static int foo;
public static int Foo {
    get {return foo;}
    set {Foo = value;} // spot the typo!!! (should be foo)
}
Run Code Online (Sandbox Code Playgroud)

基本上,set是:

static void set_Foo(int value) {
    set_Foo(value);
}
Run Code Online (Sandbox Code Playgroud)

所以这是递归的,最终将耗尽堆栈(假设没有优化等).

没有代码示例,就无法进行更多诊断.


Tee*_*tow 6

我猜你在做这样的事情:

public class MyClass
{
    public int TheInt
    {
    get
    {
        return TheInt;
    }
    set
    {
        TheInt = value; // assignment = recursion!
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,在TheInt的set函数中,您要为TheInt赋值,这将导致对set函数的嵌套调用.你得到递归,然后堆栈溢出.


Row*_*haw 5

在调试器中查看你的调用堆栈(你会在抛出异常时停止,对吗?)这应该可以强烈指示正在发生的事情.