interno é a privacidade de montagem (módulo estritamente falando). Não tem efeito na visibilidade do namespace.
A única maneira de obter privacidade de uma classe de outras classes dentro do mesmo assembly é que uma classe seja uma classe interna.
Nesse ponto, se a classe for privada, ela será invisível para qualquer coisa que não esteja nessa classe ou para a própria classe externa.
Se protegido, é visível para todos que poderiam vê-lo quando privado, mas também é visível para subclasses da classe externa.
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();
}
}
Em essência, a única maneira de alcançar o que você deseja é usar a classe externa como uma forma de namespace e restringir dentro dessa classe.