Why do I get a stack overflow error if I use the set accessor to change a static class member in C#?
I am not disputing this as a bug, I just want to know what exactly is going on in the internals of the machine.
Why do I get a stack overflow error if I use the set accessor to change a static class member in C#?
I am not disputing this as a bug, I just want to know what exactly is going on in the internals of the machine.
I think I see a different interpretation of the question. Where the question isn't why the overflow happens, but why accessors can cause overflows. In this case, the accessor is a function call just like any other, and so it does consume stack space.
If you're using public members with no accessors,
MyClass.myint
doesn't become a function call, and can't overflow the stack.You want to know what's going on in the internals to cause the stack overflow?
Your method calls another method that results in infinite recursion: A calls A, stack overflow. A calls B, then B calls A, stack overflow. And so on.
As Marc Gravell suggested, it's likely theres a bug in your property implementation.
Look at your call stack in the debugger (you do stop when exceptions are thrown, right?) This should give you a strong indication of what's going on.
I'm guessing you're doing something like this:
The problem is, in the set function for TheInt, you're assigning a value to TheInt which will result in a nested call to the set function. You get recursion, and then a stack overflow.
You shouldn't; I expect you have something like:
Essentially, the
set
is:so this is recursive, and will eventually consume up the stack (assuming no optimisations, etc).
It is impossible to diagnose more without a code sample.