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,发现是virtual 18 //所以去看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 Person 35 { 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 : Person 50 { 51 public override void SayHello() 52 { 53 Console.WriteLine("chinese"); 54 } 55 } 56 57 class BJ : Chinese 58 { 59 public override void SayHello() 60 { 61 base.SayHello(); 62 } 63 } 64 65 }
时间: 2024-10-09 08:57:35