在C#的OOP中,多态性是个比较重要的概念,
总的来说,它就是一个“对象指针”的体现,而且它是通过派生类重载基类中的虚函数型方法来实现的。
举个简单例子说明一下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Practice
{
public class MyClass : BaseClass
{
public int Val = 20;
public override void Dosomething()
{
Console.WriteLine(Val);
}
}
public class BaseClass
{
public int BaseVal = 10;
public virtual void Dosomething()
{
Console.WriteLine(BaseVal);
}
}
class Program
{
static void Main(string[] args)
{
MyClass op1 = new MyClass();
BaseClass op2 = op1
BaseClass op3 = new BaseClass();
op1.Dosomething();
op2.Dosomething();
op3.Dosomething();
op1.Val = 30;
op1.Dosomething();
op2.Dosomething();
op3.Dosomething();
}
}
}
在这个控制台种,MyClass继承基类BaseClass并重写了Dosomething() 这个方法, 这对于多态性的体现尤为重要;在Main()中,先实例的派生类op1,然后实例化基类op2,注意,在这个地方 :BaseClass op2 = op1 ,这才是真正实现多态性的地方,说得直白些,就是令 op1 与 op2 拥有“同一个”指针(事实上,是指向同一地址的两个指针),而且是同时指向MyClass的实例op1 . 现在是 op1 或 op2 中的一方改变,令一方亦变 . 在后面,将op1中的Val改变来证实这个结果.