You use a private class when it's contained within an existing class and you want it freely available only to that class. Private classes are "public" within the containing class, but are not accessible outside it.
For example:
public class MyClass
{
private class ContainedClass
{
...
}
private ContainedClass totalyLegal = new ContainedClass();
public void MyMethod()
{
totalyLegal.Property = value;
totalyLegal.Method();
}
}
public class MyOtherClass
{
private MyClass mc = new MyClass();
private MyClass.ContainedClass generateCompilerError = new MyClass.ContainedClass();
}