首页 > 代码库 > 多态override

多态override

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace Sln0405 7 { 8     class Program 9     {10         static void Main(string[] args)11         {12             Chinese c1 = new Chinese();13             c1.SayHello();14 15             Person p1 = c1;16             p1.SayHello();//p1是Person类型的变量17             //先去看Person.SayHello,发现是virtual18             //所以去看p1指向的对象的实际类型Chinese有没有19             //override覆盖SayHello,如果有则调用实际类型的方法20 21             //string s = p1.ToString();//输出类的全名22             //(*)虚方法表(VMT)23             object obj = p1;24             //obj指向的是Chinese类型的对象,25             //调用ToString()这时候发现object的ToString是virtual方法26             //所以看Chinese有没有override ToString方法,如果有则调用27             //Chinese的ToString,如果Chinese没有override ToString方法28             //则看Chinese的父类有没有override ToString方法……29             Console.WriteLine(obj.ToString());30             Console.ReadKey();31         }32     }33 34     class Person35     {36         public virtual void SayHello()37         {38             Console.WriteLine("person");39         }40 41         public override string ToString()42         {43             //return base.ToString();44             return "我是一个人";45         }46     }47 48 49     class Chinese : Person50     {51         public override void SayHello()52         {53             Console.WriteLine("chinese");54         }55     }56 57     class BJ : Chinese58     {59         public override void SayHello()60         {61             base.SayHello();62         }63     }64 65 }