using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { father _father = new son1(); _father.printclassname(); son _son = new son1(); _son.printclassname(); son0 _son0 = new son1(); _son0.printclassname(); } } public class father { public father() { } public void printclassname() { Console.WriteLine("father"); } } public class son : father { public son() { } public new virtual void printclassname() { Console.WriteLine("son"); } } public class son0 : son { public son0() { } public new virtual void printclassname() { Console.WriteLine("son0"); } } public class son1 : son0 { public son1() { } public override void printclassname() { Console.WriteLine("son1"); } } }
運行結果:
1.override修飾符指的是覆蓋,實現動態調用,整個基礎體系中必須要有一個virtual,一般為最頂層的父類用virtual,子類全部用override修飾,(但是不一定是最頂層用virtual,有可能是中間某一成開始用virtual,這時候的virtual需要和new修飾符一起使用,表示隱藏基類(把“非虛”功能也隱藏了,變成了“虛”),從此該函數開始變為虛函數了)以實現函數的重載,實現自己特定的功能。
2.new表示隱藏基類,這一點和C++中普通重載(非多態)是一樣的。