This is really a design problem. The caller is required to have knowledge (i.e., "a dependency") on the internals of MyAClass - and in this case, not only on the internals of MyAClass, but also internals of the instance MyBClass that MyAClass holds, the instance of MyCClass that BClass holds, etc. There are several problems with this design - notably, it will be fragile and difficult to change (i.e., modifications to MyCClass could impact not only this caller, but also MyAClass, MyBClass, etc.), and you'll have an ownership/order-of-instantiation problem (i.e., as you mention, "no null checks") - this API requires that each of the classes has a non-null instance of each object already initialized, or worse yet, the property "getter" will do a null check and then instantiate one before returning the new object. This is really bad because what looks like a simple property "get" call, could result in some huge memory allocation or operation.
Long story short, if the caller really needs to have knowledge of these other classes, perhaps you can redesign the API, so that the caller allocates instances of each of the objects (either by an explicit "new" or via a factory), and passes them to MyAClass as constructor arguments, effectively making the caller the "owner".
Big-picture wise, I'd recommend reading a great book I've recently come across - "API Design for C++" by Martin Reddy - it's focused on C++, but the design issues are largely the same. You could also check out the "Effective C#: 50 Specific Ways to Improve Your C#" by Bill Wagner and "More Effective C#: 50 Specific Ways to Improve Your C#" by Bill Wagner for some useful tidbits on .NET API design.
myAClass.BClass.CClassfrom outside (presumably from an instance of a class encompassing your A class...), then perhaps it's not just aesthetics but the overall object design is just bad and you should rethink it, if it's possible. – Konrad Morawski Jan 18 '12 at 16:38