C#中还有一种可访问性,就是由关键字internal所确定的“内部”访问性;
internal有点像public,外界类也可以直接访问声明为internal的类或类的成员,但这只局限于同一个程序集内部。
可以简单的将程序集理解为一个独立的.DLL或者.EXE 的文件,一个Dll或Exe文件中可以有多个类,如果某个类可被同一程序集中的类访问,但其他程序集中的类不能访问它,则称此类具有internal访问性。
例如某个类库项目可以生成一个独立的程序集(假定程序编译后生成.DLL结尾的文件),其中定义了两个类A和B
1 namespace _20141212jicheng 2 { 3 internal class A 4 { 5 internal int InternalI = 0; 6 } 7 public class B 8 { 9 public void f() 10 { 11 A a = new A(); 12 a.InternalI = 100; 13 } 14 } 15 }
由于类B和类A属于同一个程序集,所以,类B中的代码可以创建A的对象,并访问A的声明为internal的成员InternalI.
在这个程序集之外,外界只能创建声明为public的类B的对象,不能创建声明为internal的类A的对象。
internal是C#的默认可访问性,这就是说,如果某个类没有任何可访问性关键字在它前面,则它就是internal的。
比如上面的类A 可以写成:
class A { internal int InternalI = 0; }
他完全等同于
internal class A { internal int InternalI = 0; }
【注意】在类中,如果省略成员的可访问性关键字,则默认是private的。
例如:
class A { int InternalI = 0;//省略private }
相当于
internal class A { private int InternalI = 0; }