title author date CreateTime categories
dotnet 设计规范 · 抽象定义
lindexi
2018-07-05 15:48:20 +0800
2018-2-13 17:23:3 +0800
设计规范 规范

严格来说,只有一个类被其他的类继承,那么这个类就是基类。在很多时候,基类的定义是提供足够的抽象和通用方法和属性、默认实现。在继承关系中,基类定义在上层抽象和底层自定义之间。

他们充当抽象实现的实现帮助者,充当框架的部分。例如,处于框架的列表接口 IList 定义。定义一个 IList 在框架中具有重要的作用,可以抽象出具有数组列表的类型,有很多类都继承这个接口,如System.Collections.ObjectModel.Collection:System.Collections.ObjectModel.KeyedCollection 但是这些类都定义了属于自己的存储方法。

基类有时候不适合充当自己的抽象,因为他们存在太多需要定义的内容。例如Collection<T>基类包含了很多具体实现,很多都是在 IList 之外的方法,因为集成的方式由于开放的方式。事实上,他是一个把数据字段里,用字段来存储内容的数组,其他的方法都是对存储字段的封装。

从上面的讨论可以知道,基类对于定义抽象很有帮助,但是在定义的时候,基类需要有自己的职责,因为基类添加了继承深度所以对框架的复杂度会增加。所以定义基类必须基类具有意义。需要避免为了定义相同的类型定义基类,基类的定义需要执行特殊的方法,基类定义需要很清楚。如果提供很多基类,需要让开发者容易找到使用的基类而不是对继承哪个基类需要经过想的时间很长。

✓ 建议设置基类抽象,即使他没有任何抽象的方法或属性。这个定义是任何需要使用这个类定义都需要继承,但是另一个方法是设置这个类的构造是私有。

✓ 把基类和继承类的命名空间分开,这样基类有更大的扩展。

X 建议不要把公开的基类使用 Base 做后缀,如果一个类需要使用这个命名做后缀而无法取让他有意义的命名,那么这个基类可能是违反了上面的原则。

参见:docs/base-classes-for-implementing-abstractions.md at master · dotnet/docs

最新文章

  1. VS下运行项目时,检测到在集成的托管管道模式下不适用的 ASP.NET 设置。
  2. jQuery入门教程
  3. Javascript快速入门(上篇)
  4. HTML5播放器
  5. NHibernate系列文章十四:NHibernate事务
  6. VALGRIND
  7. CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
  8. Java [leetcode 31]Next Permutation
  9. Java线程监听,意外退出线程后自动重启
  10. asp.net将本地Excel上传到服务器并把数据导入到数据库
  11. linux 命令——PS命令
  12. jmeter里json path postprocessor的用法
  13. Unity中的万能对象池
  14. Windows下JNI的使用教程
  15. RxJava系列6(从微观角度解读RxJava源码)
  16. webpack-工程化工具
  17. vue.js笔记总结
  18. 注册Docker Hub、以及Push(九)
  19. python使用selenium爬百度文库ppt并生成pdf
  20. windows网络相关的命令

热门文章

  1. 洛谷1850(NOIp2016) 换教室——期望dp
  2. ubuntu 已安装 post-installation 脚本 返回错误状态 1
  3. Vue.之.项目开发工具选用
  4. JAVA Sftp 上传下载
  5. Oracle存储函数,存储过程
  6. Nginx 日志切割后无法记日志
  7. (转)Json在Unity中的简单使用
  8. PHP判断一个文件是否能够被打开
  9. placeholder改变输入框字体颜色
  10. MySQL.之 一行内容转换多行