在OO的思想体系中,封装性是一个很有意义的概念,它让对象能够拥有的独立能力,这些能力应该是私有的与公有的并存。
C#中,提供了如下的修饰符来描述一个类:

public

    public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对于访问公共成员没有限制。

internal

internal 关键字是类型和类型成员的访问修饰符。内部成员只有在同一程序集中的文件内才是可访问的。

上述文字来自于MSDN,一般情况下,使用最频繁的应该是public与private,在不少设计模式的教程资料中,几乎都是只使用了public与private。
       对于public,可以公开类或成员,给外部提供可访问的类或它的成员,在类与类之间的通信提供一个通道,很明显public是非常强大的。
       但是,滥用public会带来很多麻烦的事情,比如一个动物系统(假设)中,有“鸟”这个类,同时还有“翅膀”这个类,很明显,翅膀是属于鸟的,在外部的访问中,提供显式的接口应该是访问“鸟”,而不应该访问“翅膀”,同时也不应该有能够访问翅膀的能力,这里的由于鸟与翅膀是两个类,鸟要能够访问翅膀这个类中的内容,那么就应该把“翅膀”这个类公开给“鸟”。如果直接使用了public,结果是,外部的类来访问时,它即可以看见“鸟”这个类,也可以看见“翅膀”这个类。
      这说明外部类可以看见你本来想隐藏的“翅膀”。在这里,当然可以通过写一些附加的代码来限制外部的可访问类。可惜,这不是一个好主意,在真实世界之中,如果在没有必要的情况下,你知道这东西是鸟类就行了,至于它长得一个什么翅膀,可能并不需要关心。这里就需要一个好方法来限制外部类对这些类的可见度。
      调整类的可见度,可以通过一开始提到的几个修饰符,上面的修改符,很明显没有提供什么比较有意义的访问控制。因为无论是用哪一种,都不太容易达到我们要求的效果。
       要解决此问题,可以使用接口,“鸟”类继承于该接口,“翅膀”并不继承于接口,它在某命名空间中,提供为public,然后外部访问通过接口进行,这样,可见性就被适当地限制住了。
       如下所示:


        对于层次构造过深、过于混杂的类,可以考虑发布为程序集的方式,这样,在程序集内部中还可以通过internal 来限制访问的可见性,这样就大大地提高了灵活性,并有更多的组合方式可以选择。
        
       善于使用命名空间进行分割类间的关系,是一个比较好的办法。在现在的OO思想中,分割的单位不应该再一个类,而应该是一组类构成的一个命名空间,在这个命名空间中,类间的相互作用是比较紧密的,耦合度也高,但通过以命名空间为单位来实现,可以实现包与包间的低耦合性,包内的高内聚性。

转载于:https://www.cnblogs.com/William_Fire/archive/2005/01/07/87990.html

命名空间元素的封装性相关推荐

  1. 让你觉得破坏了封装性的扩展方法

    扩展方法源于对扩展方法的了解是来自List<T>的Where.Order.GroupBy等方法的使用,智能感知提示这些方法都是扩展方法,于是MSDN上查阅后总结如下自定义扩展方法(将字符串 ...

  2. C#forUnity快速入门(连载5)-C#OOP编程之封装性

     C# for Unity 编程语言快速入门教程(连载5)---C#OOP编程之封装性  C#的OOP即面向对象开发三大特性: 封装.继承.多态,是非常核心的OOP开发思想.现就这部分总结部分知识点如 ...

  3. 模块的封装性分析-读书笔记

    引子 最近看<Java Application Architecture-Modularity Patterns with Examples Using OSGi-中文译名Java应用架构设计& ...

  4. java 打破封装_继承打破了封装性

    今天看OOD启思录的时候,看到继承那章,回想到之前看Effective JAVA的时候,看到那里举的一个继承的危险性的例子,不过记得不是很精确,于是就翻出那本书: 第十四条,复合优先于继承. 那里说, ...

  5. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  6. java子类创建过程_JAVA入门小小白学习中ing(匿名对象、封装性、继承性、子类对象的创建过程、spuer关键字(用法一))...

    小小白慢慢学习中ing 第十二天 努力努力 本日内容(匿名对象.封装性.继承性.子类对象的创建过程.spuer关键字) 1.匿名对象 创建对象的语法:Person p1 = new Person(); ...

  7. C++类为什么使用private?------封装性

    ---------------------------------------------------直观解释--------------------------------------------- ...

  8. 第15天学习Java的笔记(封装性,this,构造方法)

    还有35天! 面向对象三大特征之封装性 package Demo1501;/** 面向对象三大特征:封装.继承.多态** 封装性在Java中的体现:* 1.方法就是一种封装* 2.关键字private ...

  9. java的封装性_Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)--java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

最新文章

  1. SpringMVC上传文件解析request请求为空获取不到数据问题
  2. 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类
  3. 【python】【scrapy】使用方法概要(三)
  4. keynote使用手册_如何使用Keynote和智能手机为AR创建原型
  5. C++中STL的一些用法的补充
  6. 【渝粤教育】国家开放大学2018年秋季 1317T社会工作行政(本) 参考试题
  7. python基础入门(1)
  8. oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出
  9. MyBatis 别名标签 sql的复用
  10. 获取0-1的加密的随机数
  11. 微信小程序使用IconFont彩色图标
  12. Windows系统通过cmd查找结束进程
  13. React H5图片压缩上传
  14. 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
  15. 多模态逆天图片生成,OpenAI又一力作:DALL·E 2
  16. pip install -U里面的-U是什么意思
  17. RTMP协议封装H264和H265协议详解
  18. 第三代战斗机的特点有哪些
  19. java 对象为空异常,Java空对象(null)是怎么回事?
  20. 电表水表数据采集系统

热门文章

  1. 世界无人帆船大赛首次登陆中国,水手梦也能用代码实现
  2. session、flask session知识的相关收集
  3. MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
  4. Android 广播内容全知道 | 掘金技术征文
  5. 搭建windows下filezilla FTP服务器
  6. php 字符串转数组 提取中文 提取英文 字符串类型
  7. docker删除es数据_Docker的常用命令
  8. mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充
  9. Go 语言编程 — 错误处理
  10. 用 C 语言开发一门编程语言 — 字符串与文件加载