命名空间元素的封装性
在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
命名空间元素的封装性相关推荐
- 让你觉得破坏了封装性的扩展方法
扩展方法源于对扩展方法的了解是来自List<T>的Where.Order.GroupBy等方法的使用,智能感知提示这些方法都是扩展方法,于是MSDN上查阅后总结如下自定义扩展方法(将字符串 ...
- C#forUnity快速入门(连载5)-C#OOP编程之封装性
C# for Unity 编程语言快速入门教程(连载5)---C#OOP编程之封装性 C#的OOP即面向对象开发三大特性: 封装.继承.多态,是非常核心的OOP开发思想.现就这部分总结部分知识点如 ...
- 模块的封装性分析-读书笔记
引子 最近看<Java Application Architecture-Modularity Patterns with Examples Using OSGi-中文译名Java应用架构设计& ...
- java 打破封装_继承打破了封装性
今天看OOD启思录的时候,看到继承那章,回想到之前看Effective JAVA的时候,看到那里举的一个继承的危险性的例子,不过记得不是很精确,于是就翻出那本书: 第十四条,复合优先于继承. 那里说, ...
- Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))
面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...
- java子类创建过程_JAVA入门小小白学习中ing(匿名对象、封装性、继承性、子类对象的创建过程、spuer关键字(用法一))...
小小白慢慢学习中ing 第十二天 努力努力 本日内容(匿名对象.封装性.继承性.子类对象的创建过程.spuer关键字) 1.匿名对象 创建对象的语法:Person p1 = new Person(); ...
- C++类为什么使用private?------封装性
---------------------------------------------------直观解释--------------------------------------------- ...
- 第15天学习Java的笔记(封装性,this,构造方法)
还有35天! 面向对象三大特征之封装性 package Demo1501;/** 面向对象三大特征:封装.继承.多态** 封装性在Java中的体现:* 1.方法就是一种封装* 2.关键字private ...
- java的封装性_Java10-java语法基础(九)——java的封装性
Java10-java语法基础(九)--java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...
最新文章
- SpringMVC上传文件解析request请求为空获取不到数据问题
- 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类
- 【python】【scrapy】使用方法概要(三)
- keynote使用手册_如何使用Keynote和智能手机为AR创建原型
- C++中STL的一些用法的补充
- 【渝粤教育】国家开放大学2018年秋季 1317T社会工作行政(本) 参考试题
- python基础入门(1)
- oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出
- MyBatis 别名标签 sql的复用
- 获取0-1的加密的随机数
- 微信小程序使用IconFont彩色图标
- Windows系统通过cmd查找结束进程
- React H5图片压缩上传
- 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
- 多模态逆天图片生成,OpenAI又一力作:DALL·E 2
- pip install -U里面的-U是什么意思
- RTMP协议封装H264和H265协议详解
- 第三代战斗机的特点有哪些
- java 对象为空异常,Java空对象(null)是怎么回事?
- 电表水表数据采集系统
热门文章
- 世界无人帆船大赛首次登陆中国,水手梦也能用代码实现
- session、flask session知识的相关收集
- MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
- Android 广播内容全知道 | 掘金技术征文
- 搭建windows下filezilla FTP服务器
- php 字符串转数组 提取中文 提取英文 字符串类型
- docker删除es数据_Docker的常用命令
- mybatis 乐观锁_MybatisPlus新特性之逻辑删除、乐观锁、自动填充
- Go 语言编程 — 错误处理
- 用 C 语言开发一门编程语言 — 字符串与文件加载