码迷,mamicode.com
首页 > Windows程序 > 详细

C# 多态

时间:2015-07-05 16:19:36      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

多态(dynamic):三要素

 

  继承,实现,父类引用指向子类(向上类型转换Upcast)

 

多态特性

  1.它是运行期,谁New出来的就调用谁里面的方法和属性

  2.一个类存在多种状态

 

应用场景

  比如说:我们要做一个画图软件,里面当然可以画。正方形,长方形,圆形....等等。这些形状了。

      面象对象思维分析:正方形,长方形,圆形。它一定有同共的属性的方法,比如说属性有:颜色,长度,高度...。而方法它们都有:画(Draw)....。所以我们可以提一个形状类(Graphics)类出来。所有图形就去继承它。

  

代码如下:

/// <summary>
/// 画笔抽象类
/// </summary>
public abstract class Graphics
{
	public abstract void Draw();
}

/// <summary>
/// 正方形
/// </summary>
public class Square : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画正方形");
	}
}

/// <summary>
/// 长方形
/// </summary>
public class Rectangle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画长方形");
	}
}

/// <summary>
/// 圆
/// </summary>
public class Circle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画圆形");
	}
}

  

  因为形状这个东西指的范围太广了(也就是一个抽象的东西(比如:三角形,四角形,正五边形也是形状))所以就用一个abstract来修饰Graphics类

  上面我讲过多态三要素:继承,实现,父类引用指向子类(向上类型转换Upcast)。上面的代码已经完成前二步了(第一继承,第二实现),接下来我们完成第三步就实现了多态

static void Main(string[] args)
{
	Graphics p1 = new Square();
	Graphics p2 = new Rectangle();
	Graphics p3 = new Circle();

	Graphics[] paints = { p1, p2, p3 };
	Draw(paints);
}

public static void Draw(Graphics[] paints)
{
	foreach (Graphics p in paints)
	{
		p.Draw();
	}
}


/// <summary>
/// 画笔抽象类
/// </summary>
public abstract class Graphics
{
	public abstract void Draw();
}

/// <summary>
/// 正方形
/// </summary>
public class Square : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画正方形");
	}
}

/// <summary>
/// 长方形
/// </summary>
public class Rectangle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画长方形");
	}
}

/// <summary>
/// 圆
/// </summary>
public class Circle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画圆形");
	}
}

  

分析图

  技术分享

 

上面就是一个多态简单的Demo了。

 

总结:

  1.多态三要素:继承,实现,父类引用指向子类

  2.如果你的项目没有前期的需求分析的,一般会很少用到多态。多态一般在软件设计上面用得比较多。

  3.面向对象编程(OOP)三大特性:继承,封装,多态。

  4.多态它是在运行期才确定去调用那个方法的(相当于说是晚绑定)

 

 

 

(PS:文章如有误,愿见谅。希望能指出来,以免误人子弟了。^_^)

 

C# 多态

标签:

原文地址:http://www.cnblogs.com/qq610540622/p/4621928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!