An interesting piece of code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1

{
class A
{
public virtual void Movie()
{
Console.WriteLine("A");
}
}
class B : A
{
public override void Movie()
{
Console.WriteLine("B");
}
}
class C : B
{
public new virtual void Movie()
{
Console.WriteLine("C");

}

}
class D : C
{
public override void Movie()
{
Console.WriteLine("D");
}

}
class Program
{
static void Main(string[] args)
{
A objA = new D();
A objB = new B();
C objC = new D();
A objD = new A();
objA.Movie();
objB.Movie();
objC.Movie();
objD.Movie();
Console.ReadLine();
}
}
}

 

 

the reason is like:

B overrides A ,it's not virtual.

so the inherited one stops when it can't go further or it reach to itself. 

posted @ 2015-03-30 19:28  hailuy  阅读(121)  评论(0编辑  收藏  举报