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

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

反转字符串

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

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

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

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

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

  1. Python基础之面向过程编程

    要求:在文件里递归找到关于包含“Python”内容的文件的绝对路径并打印出来 #定义阶段 import os,time def init(func): #装饰器的作用是使下面的生成器初始化,yield ...

  2. 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者

    可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...

  3. python基础之面向过程编程,模块

    面向过程编程 面向过程的核心是过程,指的是解决问题的步骤,即先干什么再干什么,就好像设计一条流水线. 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身 ...

  4. (语法基础)浅谈面向切面编程(AOP)

    一:前言 面向切面编程是一个很重要的编程思想,想要写出一个便于维护的程序,理解AOP并且能熟练的在实际编程中合理的运用AOP思想是很有必要的 二:AOP的基本概念 基础概念:AOP中文翻译面向切面编程 ...

  5. 面向切面编程AOP

    本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...

  6. iOS控制器瘦身-面向超类编程

    今天写这篇文章的目的,是提供一种思路,来帮助大家解决控制器非常臃肿的问题,对控制器瘦身. 滴滴 老司机要开车了 如果手边有项目,不妨打开工程看一下你的控制器代码有多少行,是不是非常多?再看一下tabl ...

  7. 你听说过PHP 的面向方面编程吗?

    面向方面编程(AOP)对于PHP来说是一个新的概念.现在PHP对于 AOP 并没有官方支持,但有很多扩展和库实现了这个特性.本课中,我们将使用 Go! PHP library 来学习 PHP 如何进行 ...

  8. PHP 的面向方面编程

    面向方面编程(AOP)对于PHP来说是一个新的概念.现在PHP对于 AOP 并没有官方支持,但有很多扩展和库实现了这个特性.本课中,我们将使用 Go! PHP library 来学习 PHP 如何进行 ...

  9. Web静态和动态项目委托代理基于面向方面编程AOP

    本来每天更新,我一般喜欢晚上十二点的时候发文章,结果是不是愚人节?校内网也将是非常有趣,破,把我给打. ..好吧-从今天开始的话题AOP.AOP太重要了,所以把第二篇文章谈论这个话题,AOP它是Spr ...

随机推荐

  1. EasyDarwin不能保存HLS列表的解决方案

    官网: easydarwin.org 安装过程 http://doc.easydarwin.org/EasyDarwin/README/ 安装客户端,iVMS-4200 客户端,并运行. 在设备管理里 ...

  2. 使用OAuth打造webapi认证服务供自己的客户端使用(二)

    在上一篇”使用OAuth打造webapi认证服务供自己的客户端使用“的文章中我们实现了一个采用了OAuth流程3-密码模式(resource owner password credentials)的W ...

  3. 前端自动化测试工具doh学习总结(一)

    前言 项目中需要用到前端自动化测试,自己被当作一个探针研究了下目前用的比较多的web自动化测试工具.一开始研究的是的selenium,但由于项目使用了大量的dijit控件,写起testCase来很费劲 ...

  4. 在tomcat下部署工程

    xx系统第一期工程完成,今天老大要我去部署系统,从来就没有在tomcat下部署过,一直都是在myeclipse下部署.启动.运行即可,所以这次遇到了几个问题,记录下来. tomcat启动 在安装tom ...

  5. [ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示

    1.ADC 简介 ADC 支持多达14 位的模拟数字转换,具有多达12 位有效数字位.它包括一个模拟多路转换器,具有多达8 个各自可配置的通道:以及一个参考电压发生器.转换结果通过DMA 写入存储器. ...

  6. ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...

  7. Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs

      Microsoft Dynamics CRM 2013   BTW: RC stands for Release for Candidate, and RTM stands for Release ...

  8. eclipse启动不了

    因为eclipse运行变得非常慢,我想再次增加一下eclipse的最大内存,以期待使eclipse能够快速的响应. 参照某些资料,我也不知道什么时候改成了这样: -vmargs-Xms512m-Xmx ...

  9. EF架构~关于多对多关系表无法更新与插入的问题

    回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...

  10. Atitit 面向对象  封装的实现原理

    Atitit 面向对象  封装的实现原理 1.1. 动态对象的模拟使用map+函数接口可以实现1 1.2. 在用结构体 + 函数指针 模拟 对象 1 1.3. This指针..1 1.4. " ...