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     }
相关文章
相关标签/搜索