class A {
public virtual void M() { Console.Write("A"); }
}
class B: A {
public override void M() { Console.Write("B"); }
}
class C: B {
new public virtual void M() { Console.Write("C"); }
}
class D: C {
public override void M() { Console.Write("D"); }
static void Main() {
D d = new D();
C c = d;
B b = c;
A a = b;
d.M(); c.M(); b.M(); a.M();
}
}
我是新來的這個概念,所以詳細的答案將不勝感激。「新」修飾符做什麼以使b.M(); a.M(); 「B」?
新的修飾符不會涉及A/B--你能否澄清,你的意思是爲什麼它不爲C輸出「B」?真的,A/B的答案與新修飾符無關。覆蓋可確保調用大多數派生的方法。 – Charleh
[C#關鍵字使用虛擬+覆蓋與新]的可能重複(http://stackoverflow.com/questions/159978/c-sharp-keyword-usage-virtualoverride-vs-new) –
可能的http://重複stackoverflow.com/questions/1067234/oh-virtual-new-modifiers-in-c-sharp-have-different-rules-so-what-is-the –