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

反转字符串
//将字符串反转。
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的练习的更多相关文章
- Python基础之面向过程编程
要求:在文件里递归找到关于包含“Python”内容的文件的绝对路径并打印出来 #定义阶段 import os,time def init(func): #装饰器的作用是使下面的生成器初始化,yield ...
- 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...
- python基础之面向过程编程,模块
面向过程编程 面向过程的核心是过程,指的是解决问题的步骤,即先干什么再干什么,就好像设计一条流水线. 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身 ...
- (语法基础)浅谈面向切面编程(AOP)
一:前言 面向切面编程是一个很重要的编程思想,想要写出一个便于维护的程序,理解AOP并且能熟练的在实际编程中合理的运用AOP思想是很有必要的 二:AOP的基本概念 基础概念:AOP中文翻译面向切面编程 ...
- 面向切面编程AOP
本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...
- iOS控制器瘦身-面向超类编程
今天写这篇文章的目的,是提供一种思路,来帮助大家解决控制器非常臃肿的问题,对控制器瘦身. 滴滴 老司机要开车了 如果手边有项目,不妨打开工程看一下你的控制器代码有多少行,是不是非常多?再看一下tabl ...
- 你听说过PHP 的面向方面编程吗?
面向方面编程(AOP)对于PHP来说是一个新的概念.现在PHP对于 AOP 并没有官方支持,但有很多扩展和库实现了这个特性.本课中,我们将使用 Go! PHP library 来学习 PHP 如何进行 ...
- PHP 的面向方面编程
面向方面编程(AOP)对于PHP来说是一个新的概念.现在PHP对于 AOP 并没有官方支持,但有很多扩展和库实现了这个特性.本课中,我们将使用 Go! PHP library 来学习 PHP 如何进行 ...
- Web静态和动态项目委托代理基于面向方面编程AOP
本来每天更新,我一般喜欢晚上十二点的时候发文章,结果是不是愚人节?校内网也将是非常有趣,破,把我给打. ..好吧-从今天开始的话题AOP.AOP太重要了,所以把第二篇文章谈论这个话题,AOP它是Spr ...
随机推荐
- EasyDarwin不能保存HLS列表的解决方案
官网: easydarwin.org 安装过程 http://doc.easydarwin.org/EasyDarwin/README/ 安装客户端,iVMS-4200 客户端,并运行. 在设备管理里 ...
- 使用OAuth打造webapi认证服务供自己的客户端使用(二)
在上一篇”使用OAuth打造webapi认证服务供自己的客户端使用“的文章中我们实现了一个采用了OAuth流程3-密码模式(resource owner password credentials)的W ...
- 前端自动化测试工具doh学习总结(一)
前言 项目中需要用到前端自动化测试,自己被当作一个探针研究了下目前用的比较多的web自动化测试工具.一开始研究的是的selenium,但由于项目使用了大量的dijit控件,写起testCase来很费劲 ...
- 在tomcat下部署工程
xx系统第一期工程完成,今天老大要我去部署系统,从来就没有在tomcat下部署过,一直都是在myeclipse下部署.启动.运行即可,所以这次遇到了几个问题,记录下来. tomcat启动 在安装tom ...
- [ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示
1.ADC 简介 ADC 支持多达14 位的模拟数字转换,具有多达12 位有效数字位.它包括一个模拟多路转换器,具有多达8 个各自可配置的通道:以及一个参考电压发生器.转换结果通过DMA 写入存储器. ...
- ueditor上传大容量视频报http请求错误的解决方法
故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...
- 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 ...
- eclipse启动不了
因为eclipse运行变得非常慢,我想再次增加一下eclipse的最大内存,以期待使eclipse能够快速的响应. 参照某些资料,我也不知道什么时候改成了这样: -vmargs-Xms512m-Xmx ...
- EF架构~关于多对多关系表无法更新与插入的问题
回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...
- Atitit 面向对象 封装的实现原理
Atitit 面向对象 封装的实现原理 1.1. 动态对象的模拟使用map+函数接口可以实现1 1.2. 在用结构体 + 函数指针 模拟 对象 1 1.3. This指针..1 1.4. " ...