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 ...
随机推荐
- 异步CTP(Async CTP)为什么那样工作?
对异步CTP感兴趣有很多原因.异步CTP使异步编程比以前更加容易了.它虽然没有Rx强大,但是更容易学.异步CTP介绍了两个新的关键字,async和await.异步方法(或Lambda表达式)必须返回v ...
- 【腾讯bugly干货分享】解耦---Hybrid H5跨平台性思考
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1275& ...
- Win10 UWP应用发布流程
简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...
- 使用MYSQL命令直接导入导出SQL文件
很多时候,我们的数据开发都会用到很多开发利器,比如powerdesigner, navicat等这些软件,虽然好用,但是要收费,在公司里面是禁止使用盗版软件的,怕罚款各方面的,所以我们也不敢直接在公司 ...
- Redis数据库的使用场景介绍(避免误用Redis)
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/122.html?1455854235 Redis 是目前 NoSQL 领域 ...
- DDD~领域事件与事件总线
回到目录 谈谈它 终于有些眉目了,搜刮了很多牛人的资料,英文的,中文的,民国文的,终于小有成就了,同时也做了个DEMO,领域事件这东西好,但需要你明白它之后才会说好,而对于明白领域事件这件事来说,它的 ...
- VM~Linux联不上网
使用桥接的链接方式,centos6.4配置静态ip,能ping通网关,但ping 外网时出现 "network is unreachable" 如:ping www.baidu.c ...
- iOS 8.1.3 “各路助手挺尸”、“封杀一切助手
图片来自 http://www.redmondpie.com 最近苹果发布了8.1.3系统更新.从更新日志看,没有多少变化(错误修复,提高稳定性和性能),但是苹果修复了一个"漏洞" ...
- WinRAR注册
新建一个txt文件并命名为"rarreg.key",添加以下内容保存,然后放置在WinRAR安装目录: RAR registration data Federal Agency f ...
- Wait Type:IO_COMPLETION
在等待 CXPACKET 完成的时间内,我查看 sys.dm_exec_requests ,发现Session的 Logical Read/Write, Physical Read 都没有变化.Wai ...