внутренняя - это конфиденциальность сборки (собственно модуля). Это не влияет на видимость пространства имен.
Единственный способ добиться конфиденциальности класса от других классов внутри той же сборки - сделать класс внутренним.
На этом этапе, если класс является частным, он невидим для чего-либо, кроме этого класса или самого внешнего класса.
Если он защищен, он виден всем, кто может видеть его в закрытом состоянии, но также виден подклассам внешнего класса.
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();
}
}
По сути, единственный способ достичь желаемого - использовать внешний класс как форму пространства имен и ограничить его внутри этого класса.