C#基础系列第五篇

前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言

  1. 多态的一些说明

 (1) 多态就是为了程序的可扩展性

 (2)多态的使用:将不同的对象当作父类来看,屏蔽掉各个对象间的不同,写出通用代码,做出通用编程,同样调用不同结果,以适应需求的不断变化

 (3)ToString方法有Object提供,使得所有的类型均可以使用Console.WriteLine()方法

            class Person

            {

                   public string Name { get; set; }

                   public int Age { get; set; }

                   //当写第三个的时候写入下面的方法

                   public override string ToString()

                   {

                          return Name;

                   }

            }

            class Program

            {

                   static void Main(string[] args)

                   {

                          int[] nums = { 1, 34, 4, 65, 7, 87, 454 };

                          Console.WriteLine(nums);

                          //输出:System.Int32[]

                          //准备对象

                          Person p = new Person();

                          p.Name = "韩迎龙";

                          p.Age = 19;

                          Console.WriteLine(p);

                          //输出:智能机器.Person

                          //第三个

                          Person p1 = new Person();

                          p1.Name = "韩迎龙";

                          p1.Age = 19;

                          Console.WriteLine(p);

                          //输出张三

                          Console.ReadKey();

                   }

            }

 (4)多态的保障

            1)继承,相同名字的方法(重载不算)

            2)里氏转换原则

 (5)is和as

            1)判断父类继承

            2)判断接口实现

            3)判断拆箱和装箱

  2.多态实现计算器

 (1) 新建一个控制台应用程序,起名为多态计算器(2)添加一个CalculstingWay类,表示计算的方法/// <summary>/// 计算机的计算/// </summary>class CalculstingWay{int num1;int num2;public int Num1{get { return num1; }set { num1 = value; }}public int Num2{get { return num2; }set { num2 = value; }}public CalculstingWay(int n1, int n2){num1 = n1;num2 = n2;}public virtual int Calculating(){//这个方法是需要子类重写的return 0;}}(3)添加一个Add类,表示实现加法的计算/// <summary>/// 提供加法计算的方法/// </summary>class Add:CalculstingWay{public Add(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (4)添加一个Sub类,表示实现减法的计算/// <summary>/// 提供减法计算的方法/// </summary>class Sub : CalculstingWay{public Sub(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 - base.Num2;}}    (5)添加一个Multi类,表示实现乘法的计算/// <summary>/// 提供乘法计算的方法/// </summary>class Multi : CalculstingWay{public Multi(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (6)添加一个Div类,表示实现除法的计算/// <summary>/// 提供除法计算的方法/// </summary>class Div : CalculstingWay{public Div(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}

(7)添加一个Calculator类,表示计算器类/// <summary>/// 表示计算器/// </summary>class Calculator{//可以进行计算的对象CalculstingWay cal;public Calculator(int num1, int num2, string oper){switch (oper){case "+":cal = new Add(num1, num2);break;case "-":cal = new Sub(num1, num2);break;case "*":cal = new Multi(num1, num2);break;case "/":cal = new Div(num1, num2);break;default:cal = null;break;}}public int jisuan(){if (cal != null){return cal.Calculating();}else{return -1;}}}

  3. 抽象方法

 (1) 父类提供一个可以被重写的方法,有子类重写,通过父类,new子类来调用

 (2)父类不需要方法体

 (3)语法:[public] abstract 返回类型 方法名(参数);

                   和方法相比有以下几点需要注意的:

                   1)去掉方法体,直接在圆括号结束的时候加分号

                   2)加上abstract进行修饰

 (4)抽象方法只允许在抽象类中存在

            1)只要在class关键字前面用abstract修饰即可

                   abstract class 类名

                   {

                          //成员

                   }

(5)抽象方法,抽象类就是为了被子类继承,重写的

   abstract class Animal{public abstract void Shout();}class Dog : Animal{public override void Shout(){Console.WriteLine("财旺福王运道旺");}}class Cat : Animal{public override void Shout(){Console.WriteLine("喵喵喵");}}class Program{static void Main(string[] args){Animal[] animals = {new Dog(),new Cat() };for (int i = 0; i < animals.Length; i++){animals[i].Shout();}Console.ReadKey();}}    

 (6)抽象方法的细节

            1)抽象类中可以包含什么东西?

                   ->比一般类多了抽象成员

                   ->抽象成员有有什么:方法,属性,索引器,事件声明

            2)抽象类不允许实例化,不能new

            3)抽象类可以有构造方法

            4)抽象类可以来源于非抽象类

                   class MyBase

                   {

                   }

                   abstract class Test : MyBase

                   {

                          public abstract void Func();

                   }

                   class MySub : Test

                   {

                          public override void Func()

                          {

                                 Console.WriteLine("抽象类可以来源于非抽象类");

                          }

                   }

            5)抽象类必须被子类重写,除非子类也是抽象的

 (7)练习:有一个形状Shape类,派生出圆Circle,矩形Rectangle和正方形Square,分别计算他们的面积Area和周长Perimeter 

   1)新建一个控制台项目:起名为多态小案例2)添加一个Shape类,实现计算面积和周长的方法abstract class Shape{public abstract double GetArea();public abstract double GetPerimeter();}3)添加一个Circle类,实现计算圆的面积和周长class Circle : Shape{int r;public Circle(int r){this.r = r;}public override double GetArea(){return Math.PI * Math.Pow(r, 2);}public override double GetPerimeter(){return 2 * Math.PI * r;}}4)添加一个类,实现计算矩形的面积和周长class Rectangle : Shape{double widthX;double heightY;public Rectangle(double widthX, double heightY){this.widthX = widthX;this.heightY = heightY;}public override double GetArea(){return widthX * heightY;}public override double GetPerimeter(){return 2 * (widthX + heightY);}}5)添加一个类,实现计算正方形的面积和周长class Square : Shape{double length;public Square(double length){this.length = length;}public override double GetArea(){return Math.Pow(length, 2);}public override double GetPerimeter(){return 4 * length;}}class Square1 : Rectangle{public Square1(double length): base(length, length){}}6)在Main方法中实现的代码如下:class Program{static void Main(string[] args){Circle circle = new Circle(5);Console.WriteLine(circle.GetArea().ToString("0.00"));Console.WriteLine(circle.GetPerimeter().ToString("0.00"));Rectangle rec = new Rectangle(5, 10);Console.WriteLine(rec.GetArea());Console.WriteLine(rec.GetPerimeter());Square square = new Square(5);Console.WriteLine(square.GetArea());Console.WriteLine(square.GetPerimeter());Square1 sqr = new Square1(5);Console.WriteLine(sqr.GetArea());Console.WriteLine(sqr.GetPerimeter());}}

 (8)抽象属性

            1)使用abstract修饰

            2)去掉方法体

            3)语法:public abstract 返回类型 属性

                          {

                                 get;

                                 set;

                          }

            4)自动属性必须包含get,set方法

            5)抽象属性可以定义只读,只写,

 (9)由子类实现抽象属性的方法

            1)用override重写属性

            2)添加一个字段,使用属性

  1. 面向对象计算器(简单工厂计算器)
(1) 新建一个控制台应用程序,起名为:简单工厂计算器(最好写成英文的,我是为了学习直接写成中文的了)      (2)新建一个CalculatingWay类,实现计算机的父类计算/// <summary>/// 计算机的计算/// </summary>abstract class CalculstingWay{int num1;int num2;public int Num1{get { return num1; }set { num1 = value; }}public int Num2{get { return num2; }set { num2 = value; }}public CalculstingWay(int n1, int n2){num1 = n1;num2 = n2;}public abstract int Calculating();}(3)新建一个Add类,/// <summary>/// 提供加法计算的方法/// </summary>class Add:CalculstingWay{public Add(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}(4)新建一个Sub类,/// <summary>/// 提供减法计算的方法/// </summary>class Sub : CalculstingWay{public Sub(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 - base.Num2;}}(5)新建一个Multi类,/// <summary>/// 提供乘法计算的方法/// </summary>class Multi : CalculstingWay{public Multi(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (6)新建一个Div类,/// <summary>/// 提供除法计算的方法/// </summary>class Div : CalculstingWay{public Div(int n1, int n2): base(n1, n2){}public override int Calculating(){return base.Num1 + base.Num2;}}    (7)新建一个Factory类static class Factory{public static CalculstingWay GetCalculator(int n1,int n2,string oper){switch (oper){case "+":return new Add(n1, n2);case "-":return new Sub(n1, n2);case "*":return new Multi(n1, n2);case "/":return new Div(n1, n2);default:return null;}}}    (8)在Main方法中写入如下这段代码:class Program{static void Main(string[] args){//提示用户输入Console.Write("请用户输入第一个数字:");int num1 = GetInputNum();Console.Write("请用户输入第一个数字:");int num2 = GetInputNum();Console.Write("请输入运算符");string oper = Console.ReadLine();//开始生产CalculstingWay cal = Factory.GetCalculator(num1, num2, oper);//开始投入使用if (cal != null){int res = cal.Calculating();Console.WriteLine("{0}{1}{2}={3}", num1, oper, num2, res);}else{Console.WriteLine("运算符有误");}}public static int GetInputNum(){return GetInputNum(int.MinValue, int.MaxValue);}/// <summary>/// 完成int类型数据的输入,并返回,要求输入的数字在0到给定的数字之间/// </summary>/// <param name="max">给定的数字的上限</param>/// <returns></returns>public static int GetInputNum(int max){return GetInputNum(0, max);}/// <summary>/// 完成int数字的输入,要求在给定范围之间/// </summary>/// <param name="min">给定范围的下线</param>/// <param name="max">给定范围的上线</param>/// <returns></returns>public static int GetInputNum(int min, int max){string str = Console.ReadLine();int num;while (true){try{num = Convert.ToInt32(str);if (num > min && num < max){break;}Console.Write("输入数字不再{0}到{1}之间,请重新输入", min, max);str = Console.ReadLine();}catch{Console.Write("输入有误,请重新输入");str = Console.ReadLine();}}return num;}} 

转载于:https://www.cnblogs.com/hanyinglong/archive/2012/10/02/2710298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

罗伯特·帕丁森Robert Pattinson(2)

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/Bettyty/blog/756873

网博士自助建站系统_自助建站:自助建站到底好还是不好?

自助建站到底好还是不好&#xff1f;很多想要做企业网站的企业都比较关心这个问题&#xff0c;因为自助建站便宜、快&#xff0c;有的自助建站做出来的效果还非常好&#xff0c;不输于定制的网站的效果&#xff0c;那为什么自助建站大都还很便宜呢&#xff1f;东西还好还便宜的…

linux tar.gz zip 解压缩 压缩命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/android/android-sdk_r11-linux_x86.tgz(能够通过翻墙得到详细的文件名称&#xff0c;再通过链接下载就可以) tar -c:…

HNU 11720 God Created The Integers

原题传送&#xff1a;http://acm.hnu.cn/online/?actionproblem&typeshow&id11720&courseid0 对于这条式子&#xff1a; 和下面的式子是等价的&#xff1a; Sp (p2 - 1) / 2 - (p - 1) / 4 那么求出Sp后有rp*Sp ≡ 1 (mod p)&#xff0c;用扩展GCD求出rp就行了。…

java equals 的区别_java中equals和==的区别是什么-百度经验

在jdk1.5以上的版本中&#xff0c;基本类型和封装类能自动转化&#xff0c;与String类型的对象和字符串常量类似。Integer i1 123; Integer i2 123 int i 123; Integer i3 new Integer(123); Integer i4 new Integer(123); …

ps命令使用 进程查看

ps命令是Process Status的缩写用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。使用该命令可以确定有哪些进程正在运行和运行的状态…

stm32例程_如何学习STM32?

阅读全文大约10min//封面为我现在使用的STM32型号&#xff1a;旗舰版 Stm32f103ZE//本文内容是对正点原子的资料整理参考资料&#xff1a;CM3权威指南/CM4权威指南&#xff08;ARM提供&#xff09;芯片参考手册 STM32F10x中文参考手册 芯片数据手册 STM32F103xCDE_DS_CH_V5.pdf…

java compile_java中的CompileAPI入门及使用

介绍java5之前我们可以通过java提供的tools.jar来操作java编译器&#xff0c;java6提供了新的API&#xff0c;让我们可以更方便的调用。包名为javax.tools。使用通过文件编译String filePath "D:\\Client.java";//获取java编译器JavaCompiler javaCompiler ToolPro…

《Two Days DIV + CSS》读书笔记——CSS选择器

1.1.2 CSS选择器 CSS 选择器最基本的有四种&#xff1a;标签选择器、ID 选择器、类选择器、通用选择器。 【标签选择器】 一个完整的 HTML 页面由很多不同的标签组成&#xff0c;而标签选择器&#xff0c;则是决定哪些标签采用相应的 CSS 样式&#xff0c;比如&#xff0c;在 s…

TempDB为什么要根据CPU数目来决定文件个数

在SQL Server的世界中&#xff0c;SQL Server在Windows之上有一套自己的任务调度和资源分配系统&#xff0c;这使得SQL Server作为Windows的一个进程&#xff0c;却可以处理大量的并发&#xff0c;这些任务调度和资源分配非常像一个操作系统&#xff0c;因此SQL Server在Window…

python基础到实践_一本书搞定Python入门到实践

题图&#xff1a;Photo by Aaron Burden on Unsplash上周介绍了几本Python从入门到进阶书籍&#xff0c;今天推荐一本入门好书《Python编程&#xff1a;从入门到实践》&#xff0c;适合零基础小白&#xff0c;也适合有其它语言背景的程序员。书中有哪些亮点&#xff1f;2016年出…

Linux网卡eth0变成eth1修改方法

由于换了主板&#xff0c;集成网卡mac地址变了&#xff0c;70-persistent-net.rules中仍然保留了老网卡的内容&#xff0c;新网卡则被识别为eth1。 将表示老网卡的行注释掉&#xff0c;然后将表示新网卡的行中eth1改成eth0&#xff0c;在把网卡配置文件ifcfg-eth0的mac地址改成…

java微博模拟登陆_java 模拟登录新浪微博(通过cookie)

这几天一直在研究新浪微博的爬虫&#xff0c;发现爬取微博的数据首先要登录。本来打算是通过账号和密码模拟浏览器登录。但是现在微博的登录机制比较复杂。通过账号密码还没有登录成功QAQ。所以就先记录下&#xff0c;通过cookie直接访问自己的微博主页。微博登录的认证过程微博…

硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区,电脑启动过程...

filex的文件系统看的云里雾里&#xff0c;还是先总结下FAT的一些基本知识吧。硬盘结构硬盘有很多盘片组成&#xff0c;每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面&#xff0c;对应2N个磁头(Heads)&#xff0c;从0、1、2开始编号。每个盘片的半径均为固定值R…

最全面 Nginx 入门教程 + 常用配置解析

转自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介绍和安装 一个简单的配置文件 模块介绍 常用场景配置 进阶内容 参考资料 Nginx介绍和安装 Nginx是一个自由、开源、高性能及轻量级的HTTP服务器及反转代理服务器&#xff0c; 其性能与IMAP/POP3代理服务器…

linux 客户机中不支持 unity_婚姻中的不理解,来源于夫妻双方情感支持的不同

很多女性在婚姻中往往觉得无法得到丈夫的理解&#xff0c;当遇到一些生活或者工作上的问题的时候&#xff0c;她们想要在情感上得到丈夫的支持和理解。但是很多丈夫对此可能并不了解和理解&#xff0c;更倾向于用理性帮助妻子解决问题。而女性所需要的帮助可能并不是解决问题的…

Linux中使用crontab命令启用自定义定时任务

一 简介Linux下的任务调度分为两类&#xff0c;系统任务调度和用户任务调度系统任务调度&#xff1a;系统需要定期执行的任务&#xff0c;比如重启、日志清理等&#xff0c;其配置文件是&#xff1a;/etc/crontab用户任务调度&#xff1a;某个用户需要定期执行的任务。用户可以…

java 循环标记_深入浅析Java 循环中标签的作用

continue和break可以改变循环的执行流程&#xff0c;但在多重循环中&#xff0c;这两条语句无法直接从内层循环跳转到外层循环。在C语言中&#xff0c;可以通过goto语句实现多重循环的跳转&#xff0c;但在非循环结构中使用goto语句会使程序的结构紊乱&#xff0c;可读性变差。…

JS,Jquery 调用 C#WebService

1&#xff0c;需要在服务下面把代码的注释去掉 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务&#xff0c;请取消对下行的注释。   //[System.Web.Script.Services.ScriptService] 2,JS 调用方法如下 var request <?xml version"1.0" encoding"…

iOS tabview 适配问题

ios7的UITableView实现ios6的圆角效果 iOS7 UITableView做成类似iOS6风格 在iOS7的时候我们会发现cell的默认线条会向右偏移&#xff0c;使左边空出了一些位置&#xff0c;这时候我们可以调用如下的方法来解决。这样我们的cell就会和iOS6前的一样铺满整个宽度了。 if ([tableVi…