谈谈我对C# 多态的理解

面向对象三要素:封装、继承、多态。
封装和继承,这两个比较好理解,但要理解多态的话,可就稍微有点难度了。今天,我们就来讲讲多态的理解。
我们应该经常会看到面试题目:请谈谈对多态的理解。
其实呢,多态非常简单,就一句话:调用同一种方法产生了不同的结果
具体实现方式有三种。

一、重载

重载很简单。

public string GetValue(string x)
{
      return x;
}
public string GetValue(string x, string y)
{
      return x+y;
}
//调用
string myValue=GetValue("测试");
string myValue2=GetValue("测试","方法");//调用了GetValue同一种方法,只是多了个参数,但还是算得上“同一种方法”。

二、重写父类中的虚方法

public class BaseClass
{
      public virtual void GetValue() //virtual关键字,供后面的子类重写该方法
      {
            Console.WriteLine("这是个虚方法");
      }
}
public class MyClass: BaseClass
{
      public override void GetValue()
      {
            Console.WriteLine("MyClass重写了基类的虚方法");
      }
}
public class NewClass: BaseClass
{
      public override void GetValue()
      {
            Console.WriteLine("NewClass重写了基类的方法");
      }
}

public class Program
{
      static void Main()
      {
            BaseClass baseClass=new BaseClass();
            MyClass myClass=new MyClass();
            NewClass newClass=new NewClass();
            //在这里你会无意间想到一句很经典的话:不同的对象调用了同一种方法产生了不同的行为
            baseClass.GetValue();//这是个虚方法
            myClass.GetValue();//MyClass重写了基类的虚方法
            newClass.GetValue();//NewClass重写了基类的方法     
      }
}