這些關鍵字的力量開始發揮作用,當您使用polymorphism
我想到一個例子有助於理解最。考慮以下幾點:
class Base {
public virtual void f() { Console.WriteLine("Virtual Base"); }
}
class Override : Base {
public override void f() { Console.WriteLine("Overridden derived"); }
}
class New : Base {
public new void f() { Console.WriteLine("New derived"); }
}
現在,當你有實際類型Derived
但靜態類型Base
的對象,調用f()
仍將輸出「重寫派生」:
Base obj = new Override();
obj.f(); // Overridden derived
隨着new
關鍵字你告訴運行時停止尋找具有該類名稱的方法:
Base obj = new New();
obj.f(); // Virtual Base
相反的類型的主叫f()
至少New
:
New obj = new New();
obj.f(); // New derived
的可能重複的[C#關鍵字的使用虛擬+重寫與新(http://stackoverflow.com/questions/159978/c-sharp -keyword-usage-virtualoverride-vs-new) – BrokenGlass