日期:2014-05-17  浏览次数:21005 次

嵌套类型的访问修饰符,public 与 internal,protected 与 protected 有什么区别?
嵌套类型的访问修饰符,public 与 internal,protected 与 protected 有什么区别?

对于在类中嵌套的类定义,
其访问修饰符,有:
public
privite
protected
internal
protected internal

-----------------
问题1:
public 与 internal 有区别吗?按理说,如果外层类,没有定义成public ,默认就是internal 的,对嵌套类来说,就算写成public,在别的程序集也不能访问呀?所以说 public 与 internal 是没有区别的???

问题2:
protected 与 protected internal 有什么区别呢?
这两种写法都是对的,但是我确实看不出二者的区别,protected肯定是internal的呀。那为何还要将两个关键字写在一起呢?

问题3:
private 可以,但是不能写成
private internal

这是为什么呢?可能您会说,这是规定,但是规定也要有点道理吧。



------解决方案--------------------
(1)Private
具有最低的访问权限,仅能在类的内部访问。
(2)Protected
只能在该类或派生类中访问,而不管具有继承关系的类是否在同一个程序集中。
(3)Internal
访问仅限于程序集
(4)Protected Internal
它可以看作是Protected与Internal的并集,意思是:如果是继承关系,无论在不在同一程序集里都能访问;如果不是继承关系,那么只能在同一程序集内访问。
(5)Public
具有最高级别的访问权限,对访问成员没有限制。
------解决方案--------------------
问题3:
private 可以,但是不能写成
private internal

前2个都不说了 1楼有答案了
private 是完全私有的,只有在类自己里面可以调用,在类的外部和子类都不能调用,子类也不能继承父类的private的属性和方法
所以private internal也毫无意义
------解决方案--------------------
Internal 同一程序集可以访问
类不写访问修饰符 默认就是internal
protected internal
访问仅限于当前程序集或从包含类派生的类型 
private和protected的不同点:在同一类中可视为一样,但在继承中就不同了,private在派生类中不可以被访问,而protected可以。


------解决方案--------------------
推荐一本书,C#图解教程/(美)索利斯(Daniel Solis)著;苏林,朱晔等译
ISBN号: 978-7-115-18773-4
出版发行项: 北京:人民邮电出版社 2009
对C#的语法给出了非常好的解释