C#多态实现之虚方法
2013-07-19 21:28
267 查看
控制台应用程序中,新建一个People类文件,代码如下:
在主程序Program中使用,代码如下:
Demo下载地址:http://download.csdn.net/detail/zxcvbnm32123/5785153
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _13多态 { public class People { public People(string name) { this.Name = name; } public string Name { get; set; } //1.第一,将父类中的方法标记为“虚方法”:virtual //2.当一个方法是虚方法的时候,那么这个方法在子类中就可以被重写了。 //子类继承父类以后,可以直接使用该方法,也可以将该方法重写 public virtual void Show() { Console.WriteLine("哈哈哈!"); } } /// <summary> /// 中国人 /// </summary> public class Chinese : People { public Chinese(string name) : base(name) { } //3.子类如果要重写父类方法,则需要在子类的Show方法前,加一个override关键字,且有且只有这一个表示重写的override关键字。 public override void Show() { Console.WriteLine("我叫:{0},我是中国人!!",Name); } } /// <summary> /// 日本人 /// </summary> public class Japanese : People { public Japanese(string name) : base(name) { } public override void Show() { Console.WriteLine("我叫:{0},我是日本人!!", Name); } } /// <summary> /// 美国人 /// </summary> public class American : People { public American(string name) : base(name) { } public override void Show() { Console.WriteLine("我叫:{0},我是美国人!!", Name); } } /// <summary> /// 英国人 /// </summary> public class English : People { public English(string name) : base(name) { } public override void Show() { Console.WriteLine("我叫:{0},我是英国人!!", Name); } } }
在主程序Program中使用,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _13多态 { //多态,即为多种表现形态;现实中就是事物的多种形态。在程序里,表现为父类的对象指向子类的实例,在调用方法时。调用的是子类重写的方法。 //实现手段:虚方法、接口、抽象类 //何时用多态??答:代码重用 class Program { static void Main(string[] args) { //面向对象重要原则 //对扩展开放,对修改关闭---开放封闭原则,扩展程序的同时不修改源代码 //格式设置热键:Ctrl+K+D:全局;Ctrl+K+F:选中部分:局部。 Chinese c1 = new Chinese("姚明"); Japanese j1 = new Japanese("向井"); American us1 = new American("T-Mac"); //添加一个 English en1 = new English("Tom"); //父类类型指向子类类型,即为实现多态 People p1 = new Chinese("刘翔"); People p2 = new Japanese("松下"); People[] cns = new People[] { c1, j1, us1, en1 }; //遍历数组中的每个元素,调用每个元素的Show方法 for (int i = 0; i < cns.Length; i++) { #region 第一种,只有三种国籍,还没有添加英国;旧版本 //判断当前的cns[i]中存储的对象是否是Chinese类型 if (cns[i] is Chinese) { //强制转换 Chinese cn = (Chinese)cns[i]; cn.Show(); } else if (cns[i] is Japanese) { Japanese cn = (Japanese)cns[i]; cn.Show(); } else if (cns[i] is American) { American cn = (American)cns[i]; cn.Show(); } #endregion #region 新版本 //在父类中添加virtual虚Show方法,通过cns[i]调用父类中的“虚方法”,进行判, //如果子类重写了父类的Show方法,则调用子类的Show方法;否则调用父类的Show方法 //即:如果cns[i]中存储的是Chinese类型,则调用Chinese的Show方法; //这就是多态的体现。 cns[i].Show(); #endregion } Console.WriteLine("ok"); Console.ReadKey(); } } }
Demo下载地址:http://download.csdn.net/detail/zxcvbnm32123/5785153
相关文章推荐
- 《转》 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- C#.NET学习笔记---C#中方法覆盖时override和new的比较,abstract和virtual的比较(含C#多态的实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- C#中多态现象和多态的实现方法
- C#多态的实现:虚方法、抽象类、接口
- c# 多态的美丽(虚方法、抽象、接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)(转)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- C# 适应虚函数,抽象类,接口分别实现多态的方法总结。
- C#基础-----虚方法实现多态
- C#学习第十一天 实现多态:虚方法、抽象类
- C#使用虚拟方法实现多态
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- C#基础:多态:基类可以定义并实现虚(virtual)方法,派生类可以重写(override)这些方法
- C#实现给图片加水印的方法