class1 would already have to have instanced class2
when you instance class1 as an object in your main code, class2 (obj2) will be shown in the dot syntax
Dim obj1 as new class1
obj1.obj2.whatever_property = whatever_val
I did this same thing in my backgammon project.
Think of bgPostNode as class1, bgChipNode as class2
bgChipNode is just a bunch of properties
bgPostNode has some props, a few methods, and a Generic.Dictionary collection object. When a bgPostNode is instanced, its constructor (public sub new() in vb.net) it creates 15 new bgChipNodes and adds them to its internal collection, and since its using Generics its using strongly typed collections of my class type, not vanilla "As Object" (type safe
)
Now in main code the one new postnode object lets me reference thru to any of the 15 chipnodes and all of their properties/methods/events (if available). The chipnode class could be defined as Friend instead of public to hide it from the main code, but the main code had a couple of points where I needed an accessor object of the chipnode type, so chipnodes, although almost always accessed thru its parent postnode, was defined as Public so main code could use it if need be.
Now to take this concept one step further, I dont just instance one bgPostNode, but 24 of them (the 24 posts in backgammon + 2 for bumping and 2 for chips off the board). I again use a generics.dictionary in the main code to hold the 28 postnodes, and their 15 chipnodes (each) so thats a total of 480 chipnode objects.
...sorry to ramble
hoped that helped in some way.