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的确有很多相似的地方,甚至如果仅以实现程序为目的的话,应该可以互换的,不是吗?
听起来怎么有点玄啊!没错,肯定不是的.是很相似,不过肯定有不一样的地方.可在哪里呢?