如果我使用set访问器更改C#中的静态类成员,为什么会出现堆栈溢出错误?
我并不认为这是一个错误,我只是想知道机器内部究竟发生了什么.
你不应该; 我希望你有类似的东西:
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); }
所以这是递归的,最终将耗尽堆栈(假设没有优化等).
没有代码示例,就无法进行更多诊断.
我猜你在做这样的事情:
public class MyClass { public int TheInt { get { return TheInt; } set { TheInt = value; // assignment = recursion! } }
问题是,在TheInt的set函数中,您要为TheInt赋值,这将导致对set函数的嵌套调用.你得到递归,然后堆栈溢出.
在调试器中查看你的调用堆栈(你会在抛出异常时停止,对吗?)这应该可以强烈指示正在发生的事情.