30天C#基础巩固------面向鸭子编程,关于string和File的练习

简介: 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,只要实现了接口,他就会拥有里面叫的方法。


679140-20160523204249522-1634547865.png


反转字符串


//将字符串反转。
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();

679140-20160523204251694-1148595827.png



读取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[]数组中.


679140-20160523204253584-1963083278.png


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


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();

679140-20160523204255303-1677309921.png



目录
相关文章
|
5月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
283 19
|
6月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1068 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
312 3
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1058 12
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
320 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
592 4
|
Java
【编程基础知识】switch case可以用string(千万注意要加上break)
本文详细探讨了Java中`switch`语句使用字符串时的注意事项,重点讲解了`break`语句的重要性。通过代码示例和流程图,帮助读者正确理解和使用`switch`语句,避免常见的编程错误。
813 4
|
安全 Java
【编程基础知识】《Java 字符串大揭秘:String、StringBuffer 与 StringBuilder 的精彩较量》
本文详细解析了 Java 中的 String、StringBuffer 和 StringBuilder 三个字符串处理类,通过特点、用法及代码示例,帮助读者理解它们在不同场景下的应用,提升字符串处理效率。
113 2
|
4月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
344 5
|
8月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
206 0