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 ...
随机推荐
- Javascript定时器学习笔记
掌握定时器工作原理必知:JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序. 常言道:setTimeout和setInterval是伪线程. ...
- dijit样式定制之TextBox(一)
参考资料:http://dojotoolkit.org/reference-guide/1.9/dijit/themes.html http://archive.dojotoolkit.org/nig ...
- Nim教程【九】
向关注这个系列的朋友们,道一声:久违了! 它并没有被我阉掉,他一定会得善终的,请各位不要灰心 Set集合类型 为了在特殊场景下提高程序的性能设置了Set类型,同时也是为了保证性能,所以Set只能容纳有 ...
- 切换到ZSH以后遇到的坑
了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH.具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把.个人主要是被ZSH强大的自动补全吸引过来的.虽然bash装了bash-co ...
- 基于Token的WEB后台认证机制
几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- Java-条件语句、循环语句练习
题目一:一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)? double height=0.08; for(int i=1;i>0;i++) { heig ...
- Atitit 深入理解命名空间namespace java c# php js
Atitit 深入理解命名空间namespace java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3 ...
- Atitit 从 RGB 到 HSL 或 HSV 的转换
Atitit 从 RGB 到 HSL 或 HSV 的转换 1.1. 从 RGB 到 HSL 或 HSV 的转换公式与原理1 1.2. public static HSV RGB2HSV(Color ...
- Backbone中 View之间传值的解决办法
Backbone中的View就是用来展示由Model层传出的数据,或者在View里产生的一些数据,包括输入框中输入等产生的数据,由当前View传递到另外一个View层里,应该怎么办呢,我之前读到一位博 ...
- IIS集成模式下,URL重写后获取不到Session值
近期给公司网站添加了伪静态功能,但是今天发现了在伪静态的页面中,Session值是获取不到的. 原因是在伪静态请求的时候,Session请求被“过滤”掉了. 开始是把web.config文件中的mod ...