📅  最后修改于: 2020-10-31 03:08:28             🧑  作者: Mango
术语“多态”是“多” +“变形”的组合,表示多种形式。这是一个希腊词。在面向对象的编程中,我们使用3个主要概念:继承,封装和多态性。
C#中有两种类型的多态:编译时多态和运行时多态。通过C#中的方法重载和运算符重载来实现编译时多态。也称为静态绑定或早期绑定。通过方法重载实现的运行时多态也称为动态绑定或后期绑定。
让我们看一下C#中运行时多态的简单示例。
using System;
public class Animal{
public virtual void eat(){
Console.WriteLine("eating...");
}
}
public class Dog: Animal
{
public override void eat()
{
Console.WriteLine("eating bread...");
}
}
public class TestPolymorphism
{
public static void Main()
{
Animal a= new Dog();
a.eat();
}
}
输出:
eating bread...
让我们看看C#中运行时多态的另一个示例,其中有两个派生类。
using System;
public class Shape{
public virtual void draw(){
Console.WriteLine("drawing...");
}
}
public class Rectangle: Shape
{
public override void draw()
{
Console.WriteLine("drawing rectangle...");
}
}
public class Circle : Shape
{
public override void draw()
{
Console.WriteLine("drawing circle...");
}
}
public class TestPolymorphism
{
public static void Main()
{
Shape s;
s = new Shape();
s.draw();
s = new Rectangle();
s.draw();
s = new Circle();
s.draw();
}
}
输出:
drawing...
drawing rectangle...
drawing circle...
C#中的数据成员无法实现运行时多态。让我们看一个例子,其中我们通过引用变量访问字段,引用变量引用派生类的实例。
using System;
public class Animal{
public string color = "white";
}
public class Dog: Animal
{
public string color = "black";
}
public class TestSealed
{
public static void Main()
{
Animal d = new Dog();
Console.WriteLine(d.color);
}
}
输出:
white