如何理解C#中的override和new,看了很多博客和文章,从中收获了不少关于继承和多态的知识。但是理解层面还不够深入,不入本质。
但是,对象以及继承和多态,往往都是和现实世界类比而成的。它们源于现实世界,而高于之。我们何尝不从现实世界入手,对其实现机制进行类比。用我们比较熟悉的方式去理解呢?
见如下代码:
namespace ClassLibrary1
{
public class Teacher
{
public virtual void Paper()
{
Console.Write("老师出试卷");
}
}
public class S1 : Teacher
{
public override void Paper()
{
Console.WriteLine("S1做试卷");
}
}
public class S2 : S1
{
public override void Paper()
{
Console.WriteLine("S2重写了S1的试卷");
}
}
public class S3 : S2
{
public new void Paper()
{
Console.WriteLine("S3并没有重写S2的试卷,而是自己重新new了试卷");
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
t.Paper(); //老师出试卷
S1 s1 = new S1();
s1.Paper(); //S1做试卷
S2 s2 = new S2();
s2.Paper(); //S2重写了S1的试卷
S3 s3 = new S3();
s3.Paper(); //S3并没有重写S2的试卷,而是自己重新new了试卷
t = s3;
t.Paper();//!!S2重写了S1的试卷
t = s2;
t.Paper();//S2重写了S1的试卷
t = s1;
t.Paper();//S1做试卷
}
}
}