自己写的代码,自己看 有注释- class Program
- {
- static void Main(string[] args)
- {
- Chinese c1 = new Chinese();
- c1.SayHello();
- Person p1 = c1; //p1是Person类型的变量,先去看Person中的方法,发现是virtual
- //所以去看p1指向的对象的实际类型Chinese有没有覆盖SayHello,如果有则调用实际类型的方法
- p1.SayHello();
- ////////////////////////////
- Console.WriteLine(p1.ToString());
- //obj指向的是Chinese类对象,调用用ToString()的时候发现object的ToString是virtual方法
- //所以看Chinese有没有override ToString方法,如果有则调用Chinese的ToString()
- //如果Chinese没有override ToString()方法 则看Chinese的父类有没有override ToString()方法
- object obj = p1;
- obj.ToString();
- Console.ReadKey();
- }
- }
- //
- class Person
- {
- public virtual void SayHello()
- {
- Console.WriteLine("person");
- }
- //重写父类Object的 ToString()方法
- public override string ToString()
- {
- return "我是一个人";
- }
- }
- //
- class Chinese:Person
- {
- public override void SayHello()
- {
- Console.WriteLine("Chinese");
- }
- }
- //
- //
- class BJ : Chinese
- {
- public override void SayHello()
- {
- Console.WriteLine("我是北京人");
- }
- }
复制代码 |