using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//A a = new A();
//B b = new B();
C c = new C();
//b.GetYear();
}
}
public class A
{
public A()
{
Console.WriteLine("DEBUG: A constructing");
this.GetYear();
}
public virtual void GetYear()
{
Console.WriteLine("A");
}
}
public class B:A
{
public B():base()
{
Console.WriteLine("DEBUG: B constructing");
this.GetYear();
}
public override void GetYear()
{
//base.GetYear();
Console.WriteLine("B");
}
}
public class C : B
{
public C()
{
Console.WriteLine("DEBUG : C constructing");
this.GetYear();
}
public override void GetYear()
{
//base.GetYear();
Console.WriteLine("C");
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//A a = new A();
//B b = new B();
C c = new C();
//b.GetYear();
}
}
public class A
{
public A()
{
Console.WriteLine("DEBUG: A constructing");
this.GetYear();
}
public virtual void GetYear()
{
Console.WriteLine("A");
}
}
public class B:A
{
public B():base()
{
Console.WriteLine("DEBUG: B constructing");
this.GetYear();
}
public override void GetYear()
{
//base.GetYear();
Console.WriteLine("B");
}
}
public class C : B
{
public C()
{
Console.WriteLine("DEBUG : C constructing");
this.GetYear();
}
public override void GetYear()
{
//base.GetYear();
Console.WriteLine("C");
}
}
}
运行结果:一定大出你的意料吧!
如果把代码改一下:












































































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































































































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