看代码
using
System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication4
... {
class Program
...{
static void Main(string[] args)
...{
A a = new C();
a.foo();
B b = new C();
b.foo();
Console.ReadKey();
}
}
class A
...{
public virtual void foo()
...{
Console.WriteLine("A");
}
}
class B : A
...{
new virtual public void foo()
...{
Console.WriteLine("B");
}
}
class C : B
...{
override public void foo()
...{
Console.WriteLine("C");
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication4
... {
class Program
...{
static void Main(string[] args)
...{
A a = new C();
a.foo();
B b = new C();
b.foo();
Console.ReadKey();
}
}
class A
...{
public virtual void foo()
...{
Console.WriteLine("A");
}
}
class B : A
...{
new virtual public void foo()
...{
Console.WriteLine("B");
}
}
class C : B
...{
override public void foo()
...{
Console.WriteLine("C");
}
}
}
输出是
A
C
由于B使用了new关键字,使得B的foo不再是A的override。所以当调用a.foo(); 时, 无法调用到C的foo.