C#中的隱藏方法

在C#中要重寫基類的方法,C#提倡在基類中使用virtual來標記要被重寫的方法,在子類也就是派生類中用voerride關鍵字來修飾重寫的方法。java

若是要是項目中前期考慮不足,我沒有在基類(ClassA)中寫入Amethod方法,可是派生類(ClassB)中因爲需求早早的寫完了Amethod方法,而且又有許多類(ClassC,ClassD..)又繼承了派生類(ClassB),而且重寫了Amethod方法。當這個時候我又想往最初的基類中(ClassA)添加Amethod方法,這就是存在一個潛在的錯誤,C#語法會在程序編譯的時候提示出警告,須要給派生類(ClassB)重寫的方法添加一個關鍵字「New」,以表示它會隱藏基類中的Amethod方法。ide

爲何在java中就不須要這麼麻煩呢?java若是不base.Amethod就認爲調用最新的子類中的重寫方法。函數

那是由於在java中,全部的函數都是虛擬的,可被重寫的。這無疑下降了性能。性能

看代碼理解:spa

 1 public class People  2  {  3         public People()  4  {  5             Console.WriteLine("father' custor");  6  }  7         public void Eat()  8  {  9             Console.WriteLine("father eat"); 10  } 11  } 12     class Man : People 13  { 14         private int age; 15         public int Age 16  { 17             get 
18  { 19                 Console.WriteLine("age get"); 20                 return age; 21  } 22             set
23  { 24                 Console.WriteLine("age set = ",value); 25                 age = value; 26  } 27  } 28         public Man() 29  { 30             Console.WriteLine("son's custor"); 31  } 32         public void WhoEat() 33  { 34             base.Eat(); 35  } 36         
37         public new void Eat() 38  { 39             base.Eat(); 40             Console.WriteLine("son eat!"); 41  } 42  } 43 
44     class Children :Man 45  { 46         public new void Eat() { Console.WriteLine("children eat!"); } 47     }
相關文章
相關標籤/搜索