wewnętrzna to prywatność montażu (ściśle mówiąc modułu). Nie ma to wpływu na widoczność przestrzeni nazw.
Jedynym sposobem uzyskania prywatności klasy z innych klas w tym samym zestawie jest to, aby klasa była klasą wewnętrzną.
W tym momencie, jeśli klasa jest prywatna, jest niewidoczna dla niczego, co nie jest w tej klasie ani w samej klasie zewnętrznej.
Jeśli jest chroniony, jest widoczny dla każdego, kto może go zobaczyć jako prywatny, ale jest również widoczny dla podklas klasy zewnętrznej.
public class Outer
{
private class Hidden { public Hidden() {} }
protected class Shady { public Shady() {} }
public class Promiscuous { public Promiscuous() {} }
}
public class Sub : Outer
{
public Sub():base()
{
var h = new Hidden();
var s = new Shady();
var p = new Promiscuous();
}
}
public class Outsider
{
public Outsider()
{
var h = new Outer.Hidden();
var s = new Outer.Shady()
var p = new Outer.Promiscuous();
}
}
W istocie jedynym sposobem osiągnięcia tego, czego pragniesz, jest użycie klasy zewnętrznej jako formy przestrzeni nazw i ograniczenie wewnątrz tej klasy.