EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#访问修饰符

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:

Ifoo

 

MyClass.cs:

myclass

 

Program.cs:

Program

 

因为你使用了internal关键字,所以Program.cs无法看到MyClass的内容。

 

但是你把MyClass的internal换成public,Program.cs就可以访问MyClass了,

 

这就是internal的作用。

This article was last edited at 2020-03-16 20:14:00

* *