internal adalah privasi perakitan (tepatnya modul). Ini tidak berpengaruh pada visibilitas namespace.
Satu-satunya cara untuk mencapai privasi kelas dari kelas lain dalam rakitan yang sama adalah untuk kelas menjadi kelas dalam.
Pada titik ini, jika kelas itu privat, ia tidak terlihat oleh apa pun yang tidak ada di kelas itu atau kelas luar itu sendiri.
Jika diproteksi, ini terlihat oleh semua orang yang bisa melihatnya saat privat tetapi juga terlihat oleh sub kelas dari kelas luar.
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();
}
}
Intinya satu-satunya cara untuk mencapai apa yang Anda inginkan adalah dengan menggunakan kelas luar sebagai bentuk namespace dan membatasi di dalam kelas itu.