C#类的多态性详解

2019-12-26 13:37:03于海丽
  • a2.G(); //G()为虚方法,因a2引用派生类B对象,调用派生类B的G(),显示B.G   F2(a2); //由于a2引用A类派生类B的对象b,调用派生类B的的G(),显示B.G  
  • F2(a1); //实参为基类A对象,调用A类的函数G(),显示A.G   }  
  • }   }  

    输出结果:

    C#类的多态性详解

    看上面的代码,我产生了一个疑问?为什么因为G()为虚方法,a2引用派生类B对象,调用的是B类的G()?

    这里有一个解释:如果将基类引用变量引用不同对象,或者是基类对象,或者是派生类对象,用这个基类引用变量分别调用同名虚方法,根据对象的不同,会完成不同的操作。而非虚方法不具备次此功能。

    关于类的多态性典型的例子:

     

     
    1. //类的多态性   namespace e_11  
    2. {   public class Person  
    3. {   private String name = "张三"; //类的成员说明  
    4. private int age = 12;   protected virtual void Display() //类的虚方法  
    5. { Console.WriteLine("姓名:{0},年龄:{1}", name, age); }   public Person(string Name, int Age) //构造函数,函数名和类名同名,无返回值  
    6. { name = Name; age = Age; }   static public void DisplayData(Person aPerson) //静态方法