黑马程序员技术交流社区

标题: C#访问性问题 [打印本页]

作者: 古古头    时间: 2012-7-3 13:05
标题: C#访问性问题
“通常,成员的可访问性低于包含成员的类型的可访问性。 如果由成员实现接口方法或重写已在公共基类中定义的虚拟方法时,内部类的公共成员可以从外部程序集访问。”
MSDN上的,原文是这样,我觉得“内部类”三个字翻译的不好,实际上是internal类,不是nested类。
它说的是什么意思,如果是internal类的话,在别的程序集写都写不出来,还怎么访问它的公共成员?
是不是涉及到反射方面的?

访问修饰符(C# 编程指南).png (22.9 KB, 下载次数: 48)

MSDN网页截图

MSDN网页截图

作者: 许庭洲    时间: 2012-7-3 13:24
1,一个内部类被嵌套多少层并不重要,他能透明的访问所有它所嵌入的外围类的所有成员;
2,每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了(某个接口的)实现,对内部类都没有影响;
3,内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。
作者: 古古头    时间: 2012-7-3 14:09
许庭洲 发表于 2012-7-3 13:24
1,一个内部类被嵌套多少层并不重要,他能透明的访问所有它所嵌入的外围类的所有成员;
2,每个内部类都能 ...

但是,我问的不是关于内部类(nested)的知识,而是关于内部访问的类(internal),MSDN原句的翻译有点问题,我已经说明了,他说的是用internal关键字修饰的供程序集内部访问的类。
作者: 古古头    时间: 2012-7-3 14:12
“However, a public member of an internal class might be accessible from outside the assembly if the member implements interface methods or overrides virtual methods that are defined in a public base class.”,原句如上。
作者: 许庭洲    时间: 2012-7-3 14:29
古古头 发表于 2012-7-3 14:09
但是,我问的不是关于内部类(nested)的知识,而是关于内部访问的类(internal),MSDN原句的翻译有点问 ...

4,internal修饰的类表明只有程序集内部才能访问,老外的设计是基于C#没有友元的概念,想把关系密切的几个类可以打破封装,相互访问,同时对外保持封装性,于是设计一个internal类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2