见过这样的修饰符,但是没有仔细考虑过,今天做一个小练习。
先给出一个链接,别人在网上讨论的:http://wenku.baidu.com/view/4023f65abe23482fb4da4cfe.html
1.本类中访问的情况:
2.子类中访问的情况:(这是在同一命名空间中的,所以internal修饰的是可以访问的)
3.在同一命名空间下,但是在其它的类中的访问情况:(由于是在同一命名空间,internal和protected internal的作用没什么区别)
4.在另外的项目中,也就是命名空间不同的访问情况:
5.还有一种情况是,在另外的命名空间中,在TestA子类中的访问情况:
由上面的几个例子可以看出,internal和protected internal主要的区别如下:
1) 命名空间相同的时候,protected internal=internal;
2) 命名空间不同的时候,protected internal=protected;
也就是说protected internal用到的场合要比internal广泛。这在Jeffrey Richter的《CLR via C#》中有相关的描述:(P142 第三版)
修饰符从限制最大(private)到限制最小(public)的排序:
private
protected
internal 成员只能由定义程序集中的方法访问
protected internal 成员可由任何嵌套类型、任何派生类型(不管在什么程序集)或者定义程序集中的任何方法访问
public