如果我使用set访问器更改C#中的静态类成员,为什么会出现堆栈溢出错误?
我并不认为这是一个bug,我只是想知道机器的内部到底发生了什么。
发布于 2009-03-17 22:08:51
你不应该这样;我希望你有这样的东西:
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);
}所以这是递归的,最终会消耗整个堆栈(假设没有优化,等等)。
没有代码样本,就不可能进行更多的诊断。
发布于 2009-03-17 22:32:27
我猜你是这样做的:
public class MyClass
{
public int TheInt
{
get
{
return TheInt;
}
set
{
TheInt = value; // assignment = recursion!
}
}问题是,在TheInt的set函数中,您为TheInt分配了一个值,这将导致对set函数的嵌套调用。你得到了递归,然后是堆栈溢出。
发布于 2009-03-17 22:10:24
在调试器中查看调用堆栈(当抛出异常时,您确实会停止,对吗?)这应该会给你一个强有力的指示,告诉你发生了什么。
https://stackoverflow.com/questions/656226
复制相似问题