using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VirMethod
{
public class Person
{ public string name;
public int age;
public Person(string name, int age)
{ this.name = name;
this.age = age;
}
public Person() { }
public void getInfo()
{ Console.WriteLine(name);
Console.WriteLine(age);
}
public virtual void WriteInfo()
{ Console.WriteLine("Person的信息");
}
}
public class student : Person
{ public string school;
public void study()
{ Console.WriteLine("Studding");
}
public override void WriteInfo()
{
//base.WriteInfo();
Console.WriteLine("Student的信息");
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.name = "张三";
p.age = 28;
p.WriteInfo();
p.getInfo();
student s = new student();
p = s;
s.name = "李四";
s.age = 18;
p.WriteInfo();
s.WriteInfo();
s.getInfo();
p.getInfo(); //为什么这里的输出会和s.getInfo();一样呢?person的getInfo并没有用虚方法重写啊?
Console.ReadLine(); }
}
}
student s = new student();
p = s;
s.name = "李四";
s.age = 18;
p.WriteInfo();
s.WriteInfo();
s.getInfo();
p.getInfo(); //为什么这里的输出会和s.getInfo();一样呢?person的getInfo并没有用虚方法重写啊?
Console.ReadLine();s.getInfo();和p.getInfo(); 输出的值都是李四,18,怎么会这样呢?纠结啊,难道是P=S的原因吗?但我调式的时候看见P.getInfo()调用的是person里面的getInfo()方法的啊。但输出来的值却不是person里面的值(张三,28)?
请高手帮忙解释一下啊。谢谢
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VirMethod
{
public class Person
{ public string name;
public int age;
public Person(string name, int age)
{ this.name = name;
this.age = age;
}
public Person() { }
public void getInfo()
{ Console.WriteLine(name);
Console.WriteLine(age);
}
public virtual void WriteInfo()
{ Console.WriteLine("Person的信息");
}
}
public class student : Person
{ public string school;
public void study()
{ Console.WriteLine("Studding");
}
public override void WriteInfo()
{
//base.WriteInfo();
Console.WriteLine("Student的信息");
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.name = "张三";
p.age = 28;
p.WriteInfo();
p.getInfo();
student s = new student();
p = s;
s.name = "李四";
s.age = 18;
p.WriteInfo();
s.WriteInfo();
s.getInfo();
p.getInfo(); //为什么这里的输出会和s.getInfo();一样呢?person的getInfo并没有用虚方法重写啊?
Console.ReadLine(); }
}
}
student s = new student();
p = s;
s.name = "李四";
s.age = 18;
p.WriteInfo();
s.WriteInfo();
s.getInfo();
p.getInfo(); //为什么这里的输出会和s.getInfo();一样呢?person的getInfo并没有用虚方法重写啊?
Console.ReadLine();s.getInfo();和p.getInfo(); 输出的值都是李四,18,怎么会这样呢?纠结啊,难道是P=S的原因吗?但我调式的时候看见P.getInfo()调用的是person里面的getInfo()方法的啊。但输出来的值却不是person里面的值(张三,28)?
请高手帮忙解释一下啊。谢谢
现在p就是s了...
肯定一样的
virtual 加上,表示可以把实现放在子类
virtual 不加,只是表示在本类中也会实现,不影响多态的使用
所以,后面执行的p.getInfo(),就等同于s.getInfo()