usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication2
{
classProgram
{
staticvoidMain(string[]args)
{
//Aa=newA();
//Bb=newB();
Cc=newC();
//b.GetYear();
}
}
publicclassA
{
publicA()
{
Console.WriteLine("DEBUG:Aconstructing");
this.GetYear();
}
publicvirtualvoidGetYear()
{
Console.WriteLine("A");
}
}
publicclassB:A
{
publicB():base()
{
Console.WriteLine("DEBUG:Bconstructing");
this.GetYear();
}
publicoverridevoidGetYear()
{
//base.GetYear();
Console.WriteLine("B");
}
}
publicclassC:B
{
publicC()
{
Console.WriteLine("DEBUG:Cconstructing");
this.GetYear();
}
publicoverridevoidGetYear()
{
//base.GetYear();
Console.WriteLine("C");
}
}
}
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication2
{
classProgram
{
staticvoidMain(string[]args)
{
//Aa=newA();
//Bb=newB();
Cc=newC();
//b.GetYear();
}
}
publicclassA
{
publicA()
{
Console.WriteLine("DEBUG:Aconstructing");
this.GetYear();
}
publicvirtualvoidGetYear()
{
Console.WriteLine("A");
}
}
publicclassB:A
{
publicB():base()
{
Console.WriteLine("DEBUG:Bconstructing");
this.GetYear();
}
publicoverridevoidGetYear()
{
//base.GetYear();
Console.WriteLine("B");
}
}
publicclassC:B
{
publicC()
{
Console.WriteLine("DEBUG:Cconstructing");
this.GetYear();
}
publicoverridevoidGetYear()
{
//base.GetYear();
Console.WriteLine("C");
}
}
}
运行结果:一定大出你的意料吧!
如果把代码改一下:












































































通过这两个例子,终于好像彻底明白了虚函数和new(子类屏蔽父类的方法的关键字).
不过还有更cool点儿的.....请看下面的例子,仔细看小心头晕哦,哈:)































































































怎么样,发现了吧.虚函数和new的确有很多相似的地方,甚至如果仅以实现程序为目的的话,应该可以互换的,不是吗?
听起来怎么有点玄啊!没错,肯定不是的.是很相似,不过肯定有不一样的地方.可在哪里呢?