多态的定义:
通过指向派生类的基类引用,调用虚函数,会根据引用所指向派生类的实际类型,调用派生类中的同名重写函数,便是多态。
C#中的多态可以分为两种类型:
编译时多态(静态多态):
通过方法重载实现,方法重载指的是在同一个类当中定义多个方法名相同但参数不同的方法,编译器会根据方法调用时传入的参数来选择调用哪个方法
方法重载是在同一个类中定义多个方法名相同但参数不同的方法。
C#编译器会根据传入的参数类型和数量来选择调用哪个方法
using System;
namespace 静态多态
{
public class Test
{
public int Add(int a, int b, int c)
{
return a + b + c;
}
public int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main(string[] args)
{
TestData dataClass = new TestData();
int add1 = dataClass.Add(1, 2);
int add2 = dataClass.Add(1, 2, 3);
Console.WriteLine("add1 :" + add1);
Console.WriteLine("add2 :" + add2);
}
}
}
运行时多态(动态多态):
通过方法重写实现,方法重写是指子类重写父类中的虚方法,运行时会根据对象的实际类型来调用对应的重写方法。
方法重写是在子类中重新定义从父类继承的方法,为了实现方法重写,父类中的方法必须被标记为virtual,子类中的方法则用override关键字标记
using System;
namespace 继承
{
public class Animal
{
public virtual void Dog()
{
Console.WriteLine("准备复写");
}
}
public class D : Animal
{
public override void Dog()
{
Console.WriteLine("复写成功");
}
}
internal class Program
{
static void Main(string[] args)
{
D dog = new D();
dog.Dog();
}
}
}