My question is, in the First() constructor, isnt it bad that we are sending a reference of class First() BEFORE it is fully constructed?
Somewhat. It can be a problem, certainly.
If the Second constructor just holds onto a reference for later use, that’s not too bad. If, on the other hand, the Second constructor calls back into First:
public Second(First f)
{
f.DoSomethingUsingState();
}
… and the state hasn’t been set up yet, then that would of course be a Very Bad Thing. If you call a virtual method on First then it could be even worse – you could end up calling into some code which hasn’t even had a chance to run any of its constructor body yet (although its variable initializers will have been executed).
In particular, readonly fields may be seen first with one value and then later with another…
I blogged about this a while ago, which may provide some more information.
Of course, without doing this sort of thing, it’s pretty hard to create two mutually-referential immutable objects…