Of course it would happen if you do in this way. This is because you use endless mutual recursion, please see:
http://en.wikipedia.org/wiki/Mutual_recursion[
^].
You should change your design the avoid constructing of the objects of mutually dependent classes in constructors. Isn't that obvious that such type of mutual recursion cannot ever end?
To start with, the stack overflow problems are probably the easiest to debug. You put a breakpoint at the very beginning of the method which might be called recursively, and, when executions stops there, look at the call stack to see where a call comes from.
The resolution of the problem really depends on you goal. First of all, think why do you need two objects of different types to reference each other. If you really need it, which always happens, think about the constraint: when some of these two references can be null and what it should mean. Anyway, you already should see that you cannot construct both in the constructor, as this dependency is circular. You should leave one or both of the cross-references to be null at the moment of the completed construction. The reference which is not constructed can be presented as a read-write property, so you could assign the reference to the instance of the object constructed separately.
This is really much easier to understand and implement than to explain… :-)
—SA