Intern ist die Privatsphäre der Baugruppe (genau genommen Modul). Dies hat keine Auswirkungen auf die Sichtbarkeit von Namespaces.
Die einzige Möglichkeit, die Privatsphäre einer Klasse gegenüber anderen Klassen innerhalb derselben Assembly zu erreichen, besteht darin, dass eine Klasse eine innere Klasse ist.
Wenn die Klasse privat ist, ist sie zu diesem Zeitpunkt für alles unsichtbar, was nicht zu dieser Klasse oder zur äußeren Klasse selbst gehört.
Wenn es geschützt ist, ist es für alle sichtbar, die es privat sehen können, aber auch für Unterklassen der äußeren Klasse.
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(); // illegal, will not compile
var s = new Shady(); // legal
var p = new Promiscuous(); // legal
}
}
public class Outsider
{
public Outsider()
{
var h = new Outer.Hidden(); // illegal, will not compile
var s = new Outer.Shady() // illegal, will not compile
var p = new Outer.Promiscuous(); // legal
}
}
Im Wesentlichen besteht die einzige Möglichkeit, das zu erreichen, was Sie wünschen, darin, die äußere Klasse als Namespace zu verwenden und innerhalb dieser Klasse einzuschränken.