zoukankan      html  css  js  c++  java
  • 说说面向对象的故事,主人是人类!(二)

    接口与抽象类
    这两个家伙是被人们说的最多的东西了,在概念上我不想再多说了,我只是想把它们俩个在项目的应用上简单来说两句.
    接口,规定了一些必须被实现的行为,即只要是继承了接口,那么接口里的所有方法你都要继承,当然,如果有些方法对于你没有任何实现的价值,你也可以不去实现它,你抛一个这样的异常出来:
         /// <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
  • 相关阅读:
    在 ASP.NET 中实现会话状态的基础
    STL 备忘录
    ASP.NET开发环境的详细配置
    COFF 文件的格式
    mbstowcs and MultiByteToWideChar
    苦心人天不负
    CString GetBuffer() and ReleaseBuffer()
    c语言的函数指针
    如何架设流媒体服务器(2)
    再谈从vc6迁移到vs2005
  • 原文地址:https://www.cnblogs.com/lori/p/2057141.html
Copyright © 2011-2022 走看看