C# 多态性是指不同对象受到相同消息时,会产生不同的动作,从而实现“一个接口,多种方法”。C#支持两种多态性:
第一种是编译时多态性,是在程序编译时就决定如何实现某一动作,通过方法重载和运算符重载来实现,编译时多态性在编译时就知道调用方法的全部信息;第二种是运行时多态性,是在运行时动态实现某一动作,通过继承和虚方法来实现。对于类中的方法,若声明时加上virtual修饰符,则称该方法为虚方法,反之为非虚方法。virtual修饰符不能与修饰符static、abstract和override一起使用。
通过虚方法实现多态性
C# 多态性是指不同对象受到相同消息时,会产生不同的动作,从而实现“一个接口,多种方法”。C#支持两种多态性:
namespace 虚方法实现多态
{
class Program
{
static void Main(string[] args)
{
Base b = new Base();
Derived d = new Derived();
b.Print(); //基类打印
d.Print(); //派生类打印
b.Display(); //基类输出
d.Display(); //派生类输出
b = d;
b.Print(); //派生类打印
d.Print();
b.Display();
d.Display();
Console.ReadLine();
}
}
class Base
{
public void Display()
{
Console.WriteLine("基类输出!");
}
public virtual void Print()
{
Console.WriteLine("基类打印!");
}
}
class Derived : Base
{
new public void Display()
{
Console.WriteLine("派生类输出!");
}
public override void Print()
{
//base.Print();
Console.WriteLine("派生类打印!");
}
}
}
Base类的实例b被赋予Derived的实例d,那么b.Print()究竟调用基类还是派生类的Print()方法不是在编译时确定的,而是在运行时确定的,即根据b 在某一时刻所引用的对象来确定调用哪个版本,这体现了多态性。而对非虚方法Display的调用是在编译时确定的,在编译时就确定了它与哪个对象进行连接,因此无论实例b引用哪个对象,b.Display()都调用Base类的Display()方法。
C#多态性
最新推荐文章于 2020-07-30 13:36:30 发布