nội bộ là sự riêng tư của assembly (nói đúng ra là mô-đun). Nó không ảnh hưởng đến khả năng hiển thị không gian tên.
Cách duy nhất để đạt được sự riêng tư của một lớp với các lớp khác trong cùng một assembly là để một lớp là một lớp bên trong.
Tại thời điểm này, nếu lớp là private thì nó sẽ vô hình với bất kỳ thứ gì không có trong lớp đó hoặc chính lớp ngoài.
Nếu được bảo vệ, nó sẽ hiển thị cho tất cả những người có thể nhìn thấy nó khi ở chế độ riêng tư nhưng cũng hiển thị cho các lớp con của lớp bên ngoài.
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();
}
}
Về bản chất, cách duy nhất để đạt được những gì bạn mong muốn là sử dụng lớp ngoài như một dạng không gian tên và hạn chế bên trong lớp đó.