Unlike Java, C# - contained classes are nested. There is no relation between containing class instance and instance of contained class. Contained classes are just used in C# to control accessibility of the contained class and the avoid polluting namespaces.
(Some companies have a coding standard that each class must go into it’s own file, contained classes is a way round that for small classes.)
In Java an instance (object) of an inner class has a pointer back to the outer class. This was done in Java, as it uses lots of small classes to handle event etc. C# has delegates for that.
(Contained classes were one of the experimental ideals in Java that everyone like but did not truly prove the test of time. As C# come along a lot later, it could learn from Java what did not work well)