一、概述:通过继承实现的不同对象,调用相同的方法,产生不同的执行结果。
二、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编译时解析; 运行时的多态具有高度灵活以及抽象的特点。