interne est la confidentialité de l'assemblage (module à proprement parler). Cela n'a aucun effet sur la visibilité de l'espace de noms.
La seule façon d'obtenir la confidentialité d'une classe à partir d'autres classes au sein du même assembly est qu'une classe soit une classe interne.
À ce stade, si la classe est privée, elle est invisible pour tout ce qui n'est pas dans cette classe ou la classe externe elle-même.
S'il est protégé, il est visible par tous ceux qui pourraient le voir lorsqu'il est privé, mais il est également visible par les sous-classes de la classe externe.
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();
}
}
En substance, la seule façon d'atteindre ce que vous désirez est d'utiliser la classe externe comme une forme d'espace de noms et de la restreindre au sein de cette classe.