zoukankan      html  css  js  c++  java
  • 30天C#基础巩固------面向鸭子编程,关于string和File的练习

         面向对象编程就是面向抽象的父类进行编程,具体的实现不用考虑,由子类决定。<经典的说法--面向鸭子编程>

    eg:鸭子的编程,<对于多态的理解>

        我们都习惯把使用两条腿两边走的动物,形象的叫做鸭子。这里我们的本来的鸭子就是父类(抽象类),继承且实现方法的叫做子类,就是我们把走路和鸭子一样的都叫做鸭子一样。(木头鸭子,橡皮鸭子,真实的鸭子)。

    接口:鸭子叫,鸭子游泳。

        //鸭子大叫
        public interface IBark
        {
            void Bark();
        }
        //鸭子游泳接口
        public interface ISwitch
        {
            void Switch();//接口只管定义方法,不用管实现。
        }

    真实鸭子,木头鸭子,橡皮鸭子

        //真鸭子,即会游泳又回叫
        public class RealDuck:Duck,IBark
        {
            public void Bark()
            {
                Console.WriteLine("嘎嘎嘎嘎嘎嘎嘎------");
            }
    
            public override void Switch()
            {
                Console.WriteLine("真实的鸭子----自由自在的游泳.....");
            }
        }
        //橡皮鸭子,继承鸭子,只会叫。
        public class RubbleDuck:Duck,IBark
        {
            public void Bark()
            {
                Console.WriteLine("叽叽叽叽....");
            }
    
            public override void Switch()
            {
                Console.WriteLine("橡皮鸭子--,漂浮在水上。");
            }
        }
        //木头鸭子
        public class WoodDuck:Duck
        {
            public override void Switch()
            {
                Console.WriteLine("木头鸭子,漂浮在水上。");
            }
        }

    main()方法中的。

            /// <summary>
            /// 面向鸭子编程----->理解多态
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                //父类定义方法,子类具体实现(每个鸭子游泳是不一样的。)
                Duck d1=new RealDuck();    
                Duck d2=new RubbleDuck();   
                Duck d3=new WoodDuck();
                Console.WriteLine("……………01.鸭子游泳………...…");
                //三个鸭子的游泳都不一样
                d1.Switch();
                d2.Switch();
                d3.Switch();
                Console.WriteLine("……………02.鸭子的叫声……………");
                //把抽象类给了接口IBark,(利用了里氏转换原则)
                IBark i1 = d1 as IBark;         
                if (i1!=null) i1.Bark();          //会叫,嘎嘎嘎嘎
                IBark i2 = d2 as IBark;
                if (i2!=null)
                {
                    i2.Bark();                      //会叫,叽叽
                }
                IBark i3 = d3 as IBark;
                if (i3!=null)
                {
                    i3.Bark();                 //不会叫,没有实现ibark接口,而且木头鸭子本身就不会叫。
                }
                Console.ReadKey();
            }
        }

    上面我们把鸭子Duck定义为抽象的类,里面我们只是定义了方法,具体的实现在子类中。就是我们前面说的那样,父类定义方法,子类继承实现,这就是具体的实现在子类,每个都是不一样的。

    下面的那个利用里氏转换原理,把父类Duck转换为接口IBark,只要实现了接口,他就会拥有里面叫的方法。

    image

    反转字符串

                //将字符串反转。
                Console.WriteLine("请输入一个字符串?");
                string input = Console.ReadLine();
                char[] chs= input.ToCharArray();        //将string类型转换为数组
                for (int i = 0; i <chs.Length/2; i++)     //反转只需要执行1/2次数就可以。
                {
                    char cTemp = chs[i];
                    chs[i] = chs[chs.Length-1-i];        //第一个和最后一个转换
                    chs[chs.Length - 1 - i] = cTemp;
                }
                Console.WriteLine(new string(chs));          //把char数组又转换为string类型。
                Console.ReadKey();

    image

     读取phone.csv文件并且输出来。

                string[] lines = File.ReadAllLines("phone.csv", Encoding.Default);       //按行读取Debug文件下面
                //的csv文件,放到数组里面。
                for (int i = 0; i < lines.Length; i++)
                {
                    string[ ] ts = lines[i].Split(',');
                    Console.WriteLine("姓名:{0}",ts);           
                }
         Console.ReadKey();

    读取文件利用File.ReadAllLines(“文件名”,Encoding.Default);,这个是读取项目文件中Debug目录下的文件,按行读取值,放到string[]数组中.

    image

    利用键值对来保存我们读取到字符串中的年月日下标。

                string src = "1993年10月08日";
                Dictionary<char,int>  dic=new Dictionary<char, int>();              //声明一个键值对。
                int index = -1;
                do
                {
                    //显示这3个字符的位置下标。
                    index = src.IndexOfAny("年月日".ToCharArray(), index + 1);  //将字符串"年月日"转换为char数组,循环的输出每个下标。
                    if (index!=-1)
                    {
                        //Console.WriteLine(index);                     
                        dic.Add(src[index],index);
                    }                
                } while (index!=-1);
                //循环输出键值对中的值,注意这里的KeyValuePair<char, int>类型,不是我们以前的var。
                foreach (KeyValuePair<char, int> item in dic)
                {
                    Console.WriteLine(item.Key+"  "+item.Value);
                }
                Console.ReadKey();

    image

  • 相关阅读:
    移动网页 ----仿淘宝使用flex布局实现页面 固定顶部和底部
    微信小程序 模板template的使用
    JQ 移动端返回顶部,往下滑动时显示返回按钮,往上滑动时隐藏返回按钮
    JQ模态框+简易评价
    JQ多行文本溢出省略号插件
    评论框字符串判断
    jQuery+ajax+本地josn文件数据 测试
    vue 移动端环境搭建
    移动端前端适配方案20170707
    城通网盘,千军万马,千脑网盘,119g网盘哪个适合做网赚?
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/5521353.html
Copyright © 2011-2022 走看看