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

说说面向对象的故事,主人是人类!(二)

接口与抽象类
这两个家伙是被人们说的最多的东西了,在概念上我不想再多说了,我只是想把它们俩个在项目的应用上简单来说两句.
接口,规定了一些必须被实现的行为,即只要是继承了接口,那么接口里的所有方法你都要继承,当然,如果有些方法对于你没有任何实现的价值,你也可以不去实现它,你抛一个这样的异常出来:
     /// <summary>
    /// 人类的行为
    /// </summary>
    public interface PeopleEvent
    {
        /// <summary>
        /// 走路
        /// </summary>
        void Walk();
        /// <summary>
        /// 说话
        /// </summary>
        void Say();
        /// <summary>
        /// 使用的拐杖
        /// </summary>
        void Handle();
    }
 
    public class ChildEvent : PeopleEvent
    {
 
        #region PeopleEvent 成员
 
        public void Walk()
        {
            Console.WriteLine("走路不能太快");
        }
 
        public void Say()
        {
            Console.WriteLine("说话口吃");
        }
 
        public void Handle()
        {
            throw new NotImplementedException("小孩的行为,不用实现拐杖");
        }
 
        #endregion
}
再来看看抽象类,它在项目开发时经常用来作对象的基类,本身有公用的属性和方法,也为子类提供了可以复写的方法,看代码:
     /// <summary>
    ///  人类基类
    /// </summary>
    public abstract class PeopleBase
    {
        /// <summary>
        /// 定义一个对象,只有它的子类可以访问到它
        /// </summary>
        // protected string PeopleDescribe = "人,是一种高级动物"; //这种定义很不安全,因为它的读写是完全公开的
        protected string PeopleDescribe //它是只读属性
        {
            get
            {
                return "人,是一种高级动物";
            }
        }
        /// <summary>
        /// 建立一个虚方法,子类可以根据自己的逻辑去复写它[为什么要定义成public而不定义成protect呢
        /// 因为它的子类进行复写后这个方法将被其它项目进行调用,所以要用public]
        /// </summary>
        public virtual void DisplayDes()
        {
            Console.WriteLine(this.PeopleDescribe);
        }
    }
 
    public class Child : PeopleBase
    {
        public override void DisplayDes()
        {
            base.DisplayDes();
        }
}
 
小技巧:
  #region 一个字符串用*号分割后,然把*号改为用,号分割的实现方法
            string str = "ok*good*yes";
            string[] strarr = str.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
            string str2 = string.Join(",", strarr);
            Console.WriteLine(str2);
  #endregion

相关文章:

  • XenServer中使用Xentop查看服务器性能
  • 一个树莓派集群 (VAX)
  • C# 通过搜狐微博api远程更换壁纸
  • Android Lollipop 系统稳定性优于苹果 iOS 8
  • 安卓机器人与苹果核心,你上当了~!
  • Google新增程式掃描功能以改善Android安全性
  • 如何把一个Array 复制到ArrayList中?
  • Google 将开源 Google Earth Enterprise
  • redis安装,配置
  • 代码审查关注什么:SOLID 原则
  • 引用和指针的区别
  • Linux netstat命令详解
  • CISCO路由器不能进Rommon模式
  • Django 跨表查询--神奇的双下划线和点
  • 日志归总脚本部署
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《深入 React 技术栈》
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【译】理解JavaScript:new 关键字
  • CODING 缺陷管理功能正式开始公测
  • ES6 ...操作符
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MySQL主从复制读写分离及奇怪的问题
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Web设计流程优化:网页效果图设计新思路
  • 工程优化暨babel升级小记
  • 关于 Cirru Editor 存储格式
  • 官方解决所有 npm 全局安装权限问题
  • 前端相关框架总和
  • 小程序 setData 学问多
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用Python写一份独特的元宵节祝福
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)逆序输出字符串
  • (Git) gitignore基础使用
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Flask之app.route装饰器函数的参数
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转载)利用webkit抓取动态网页和链接
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net 中viewstate的原理和使用
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • @selector(..)警告提示
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题