当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么设置静态方法会导致堆栈溢出?》经验,为你挑选了3个好方法。

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

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



1> Marc Gravell..:

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

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

基本上,set是:

static void set_Foo(int value) {
    set_Foo(value);
}

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

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



2> Teetow..:

我猜你在做这样的事情:

public class MyClass
{
    public int TheInt
    {
    get
    {
        return TheInt;
    }
    set
    {
        TheInt = value; // assignment = recursion!
    }
}

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



3> Rowland Shaw..:

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

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有