dotnet 设计规范 · 抽象定义

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

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

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

从上面的讨论能够知道,基类对于定义抽象颇有帮助,可是在定义的时候,基类须要有本身的职责,由于基类添加了继承深度因此对框架的复杂度会增长。因此定义基类必须基类具备意义。须要避免为了定义相同的类型定义基类,基类的定义须要执行特殊的方法,基类定义须要很清楚。若是提供不少基类,须要让开发者容易找到使用的基类而不是对继承哪一个基类须要通过想的时间很长。继承

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

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

X 建议不要把公开的基类使用 Base 作后缀,若是一个类须要使用这个命名作后缀而没法取让他有意义的命名,那么这个基类多是违反了上面的原则。io

相关文章
相关标签/搜索