当前位置: 首页 > news >正文

.NET 指南:抽象化实现的基类

抽象化实现的基类是被设计成用来协助开发者实现抽象类和接口(抽象化)的类。它们为抽象化而提供了实现的细节并且在一些情况下它们是不需要进行继承就是能够被使用的。例如,Collection 能够被用来创建一个集合或者能够被继承来定义一个被强类型化的集合类。

下列代码范例示范了使用 Collection 类来创建一个被强类型化的集合对象。

public class PointManager : IEnumerable
{
    Collection<Point> pointCollection = new Collection<Point>();

    public void AddPoint(Point p)
    {
        pointCollection.Add(p);
    }
    public bool RemovePoint(Point p)
    {
        return pointCollection.Remove(p);
    }
    public IEnumerator GetEnumerator()
    {
        return pointCollection.GetEnumerator();
    }
}

下列代码范例示范了使用 Collection 类来定义一个被强类型化的集合。

public class PointCollection : Collection<Point> {}

CollectionBase 类是 .NET Framework 基类的另外一个范例。这个类能够帮助开发者实现非常规的集合。并且不能够像 Collection 和 CollectionBase 一样能够直接被使用。

抽象化实现的基类应该只在它们为库的开发者提供重要价值的时候才被提供成库的一部分。在基类只有助于实现一个库的情况下,基类就不应该是公开可见的。要使用一个内在的基类来简化库的开发,公共成员就应该把任务委托给基类来替代从基类那里进行继承的做法。

考虑基类的抽象化,即使它们不包含任何抽象的成员。这明确地传达给用户:这个类是单独被设计成被继承的。
考虑把基类存放到来自于主要情节 API 的一个单独的命名空间中。通过定义,基类就是有意的可扩展性情节并且多数用户对此都不感兴趣。
避免以 Base 作为后缀对基类进行命名,如果这个类准备在公开的 API 中被使用。

如果库把基类暴露成了一个返回类型或参数类型,那么它就不应该使用 Base 来作为名称的后缀。

转载于:https://www.cnblogs.com/Laeb/archive/2007/02/02/638275.html

相关文章:

  • 浮动静态路由
  • 范伟导老师Sniffer课程资料
  • 春节期间新闻回顾:思科微软多事 熊猫烧香完事
  • Windows Mobile 6 SDK 正式发布!
  • 怎样用javascript操作ftb编辑区内容
  • 局域网防雷电***实用解决方案
  • 系统不显示桌面的原因和解决方法
  • 让Windows下的驱动乖乖在Linux中安家!
  • Linux下文件和目录的颜色代表的含义
  • 哈哈,毒霸可以直接关闭自动播放功能,真是太棒了
  • cpu
  • TCP/IP协议
  • 报道!证明还活着。。。
  • c# 日期格式與大小判斷
  • UltraEdit 语法高亮 wordfile for Velocity / NVelocity
  • 【Linux系统编程】快速查找errno错误码信息
  • Bytom交易说明(账户管理模式)
  • classpath对获取配置文件的影响
  • Docker: 容器互访的三种方式
  • git 常用命令
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js学习笔记
  • LeetCode29.两数相除 JavaScript
  • MySQL数据库运维之数据恢复
  • Python十分钟制作属于你自己的个性logo
  • 欢迎参加第二届中国游戏开发者大会
  • 计算机常识 - 收藏集 - 掘金
  • 解决iview多表头动态更改列元素发生的错误
  • 力扣(LeetCode)56
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 七牛云假注销小指南
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 设计模式走一遍---观察者模式
  • 我的zsh配置, 2019最新方案
  • 追踪解析 FutureTask 源码
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​TypeScript都不会用,也敢说会前端?
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (04)odoo视图操作
  • (145)光线追踪距离场柔和阴影
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (二十四)Flask之flask-session组件
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)ABI是什么
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .cn根服务器被攻击之后
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • ::什么意思
  • :O)修改linux硬件时间
  • @Autowired标签与 @Resource标签 的区别
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——