.Net多态

794 阅读1分钟

一、概述:通过继承实现的不同对象,调用相同的方法,产生不同的执行结果。

二、C#支持的类型:编译时的多态 和 运行时的多态。

      1、编译时的多态: 通过重载来实现的,对于非虚的成员来说,系统在编译时,根据传递的参数类型,个数以及返回类型的不同决定实现不同的操作。

  //重载
  public int Sum(int x,int y)  public int Sum(int x,int y,int z)  public double Sum (Double x,Double y)

        1.1 重载的特点:方法名称必须相同;参数列表必须不同;返回值类型可以不同。

      2、运行时的多态:系统直到运行时,才根据实际情况实现何种操作。可以通过virtual-override(虚拟覆盖)以及abstract-override(抽象覆盖)两种方式来实现。    

namespace ConsoleApplication1
{
     abstract  class A
    {
        public void F()
        {
           Console.WriteLine("A.F");
        }
        public virtual void G()
        {
            Console.WriteLine("A.G");
        }
        public abstract void H();
    }
    class B : A
    {
        public new  void F()
        {
            Console.WriteLine("B.F");
        }
        public override void G()
        {
            Console.WriteLine("B.G");
        }
        public override void H()
        {
            Console.WriteLine("B.H");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a = new B();
            b.F();
            b.G();
            b.H();
            a.F();
            a.G();
            a.H();
            Console.Read();
        }
    }
}

三:归纳:只有虚方法和抽象方法才能被覆写;子类和基类中的方法必须具有相同的方法名称,参数个数、参数类型以及返回值类型可以不同; 编译时的多态使运行速度更快,就像const编译时解析; 运行时的多态具有高度灵活以及抽象的特点。