内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
当继承一个继承的类时,新的重写行为不是我想要的:
$ cat Program.cs
using System;
class A {
public virtual void SayHi() {
Console.WriteLine("From A");
}
}
class B : A {
public new virtual void SayHi() {
Console.WriteLine("From B");
}
}
class C : B {
public override void SayHi() {
Console.WriteLine("From C");
}
}
public class Program {
public static void Main() {
A p = new C();
p.SayHi();
}
}
$ ./Program.exe
From A
由于类C覆盖了sayHi()方法,我期望输出是From C
。为什么B类的new
修饰符在这里优先?这是什么用例?