5个访问修饰符
✦ public,完全可访问。enum和interface的成员默认都是这个级别
✦ internal,当前assembly或朋友assembly可访问,非嵌套类型的默认访问级别
✦ private,本类可访问。class和struct的成员的默认访问级别
✦ protected,本类或其子类可以访问。
✦ protected internal,联合了protected和internal的访问级别。
Tips:
✦ 内层访问级别永远受外层访问级别限制【即内层使用public,实际上只有internal的效果】。
✦ 当重写父类的函数的时候,重写后的函数必须和被重写的函数访问级别一致。
✦ 有1个例外,当在其他Assembly重写protected internal的方法时,重写后的方法必须是protected。
当前assembly→当前程序集
朋友Assembly
通过添加System.Runtime.CompilerServices.InternalsVisibleTo这个Assembly的属性,
并指定朋友Assembly的名字,就可以把internal的成员暴露给朋友Assembly。
[assembly:InternalsVisibleTo("Friend")]
进阶内容
✦ 如果朋友Assembly有Strong Name,那么就必须指定其完整的160字节的public key。
[assembly:InternalsVisibleTo("StrongFriend,PublicKey=0024f000048c...")]
关于internal访问级别详解
IFoo.cs:
MyClass.cs:
Program.cs:
因为你使用了internal关键字,所以Program.cs无法看到MyClass的内容。
但是你把MyClass的internal换成public,Program.cs就可以访问MyClass了,
这就是internal的作用。