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

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

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

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

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

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

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

dotnet 设计规范 · 抽象定义的更多相关文章

  1. dotnet 设计规范 · 抽象定义

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

  2. dotnet 设计规范 · 数组定义

    本文告诉大家数组定义需要知道的规范,本文翻译 docs dotnet ✓ 建议在公开的 API 使用集合而不是数组.集合可以提供更多的信息. X 不建议设置数组类型的字段为只读.虽然用户不能修改字段, ...

  3. dotnet 设计规范 · 数组定义

    ✓ 建议在公开的 API 使用集合而不是数组.集合可以提供更多的信息. X 不建议设置数组类型的字段为只读.虽然用户不能修改字段,但是可以修改字段里面的元素.如果需要一个只读的集合,建议定义为只读集合 ...

  4. 2018-7-5-dotnet-设计规范-·-抽象定义

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

  5. dotnet 设计规范 · 结构体定义

    X 不要给结构体默认构造函数 默认的C#编译器也不让开发者定义有默认构造的结构体 X 不要定义易变的属性 易变的属性指的是在调用属性返回值的时候返回的是新的实例,易变的属性会有很多的问题. ✓ 需要确 ...

  6. dotnet 设计规范 · 抽象类

    X 不要定义 public 或 protected internal 访问的构造函数.默认 C# 语言不提供抽象类的公开构造函数方法. 如果一个构造函数定义为公开,只有在开发者需要创建这个类的实例的时 ...

  7. dotnet 设计规范 · 抽象类

    X 不要定义 public 或 protected internal 访问的构造函数.默认 C# 语言不提供抽象类的公开构造函数方法. 如果一个构造函数定义为公开,只有在开发者需要创建这个类的实例的时 ...

  8. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  9. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

随机推荐

  1. 使用SSH连接Windows Server 2019 Core

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月7日. 一.说明 Windows Server 2019 Core,是纯命令行的Windows Server版本,没有办法使用GU ...

  2. ACL权限控制

    ALC讲述比较详细 https://zhuanlan.zhihu.com/p/360158311

  3. 打字速度单位WPM、KPM定义与计算方法

    国际通行的打字速度单位是WPM,用来量度打字速度的快慢.另外还有相关的KPM.CPM.KPH等打字速度单位,下面一一介绍. ----WPM------------------------------- ...

  4. iOS全埋点解决方案-APP和H5打通

    前言 ​ 所谓的 APP 和 H5 打通,是指 H5 集成 JavaScript 数据采集 SDK 后,H5 触发的事件不直接同步给服务器,而是先发给 APP 端的数据采集 SDK,经过 APP 端数 ...

  5. wcf .net webService和 .net webApi的联系与差异

    首先,我们需要清楚它们的概念,然后才能走好下一步. wcf是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合,它是一种重量级消息交互框架,广 ...

  6. linux系统健康检查脚本

    #!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...

  7. MYSQL索引的建立、删除以及简单使用

    一.前期数据准备 1.建表 CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAUL ...

  8. 聊聊 Netty 那些事儿之 Reactor 在 Netty 中的实现(创建篇)

    本系列Netty源码解析文章基于 4.1.56.Final版本 在上篇文章<聊聊Netty那些事儿之从内核角度看IO模型>中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以 ...

  9. Linux系列之查找命令

    前言 Linux 有四个常用的查找命令:locate.whereis.which 和 find.本文介绍它们的区别和简单用法. locate命令 这个命令将检查你的整个文件系统,并找到该关键词的每一次 ...

  10. 攻防世界MISC进阶区---41-45

    41.Get-the-key.txt 得到无类型文件,扔进kali中,strings一下,得到了一堆像flag的内容 扔进010 Editor中,搜索关键字,发现一堆文件,改后缀为zip 打开,直接得 ...