zoukankan      html  css  js  c++  java
  • C# 多态

    多态(dynamic):三要素

     

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

     

    多态特性

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

      2.一个类存在多种状态

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

     

    应用场景

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

          面象对象思维分析:正方形,长方形,圆形。它一定有同共的属性的方法,比如说属性有:颜色,长度,高度...。而方法它们都有:画(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)三大特性:继承,封装,多态。

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

  • 相关阅读:
    H5图片上传、压缩
    数据库基本操作
    数组遍历
    CURL
    获取IP
    Memcached的实战笔记
    修bug总结 (基于java语言)
    java开发工作的总结
    多线程测试类
    可清除的单例对象获取类
  • 原文地址:https://www.cnblogs.com/qq610540622/p/4621928.html
Copyright © 2011-2022 走看看