在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在C#中要重写基类的方法,C#提倡在基类中使用virtual来标记要被重写的方法,在子类也就是派生类中用override关键字来修饰重写的方法。 要是项目中前期考虑不足,我没有在基类(ClassA)中写入Amethod方法,但是派生类(ClassB)中由于需求早早的写完了Amethod方法,并且又有许多类(ClassC,ClassD..)又继承了派生类(ClassB),并且重写了Amethod方法。当这个时候我又想向最初的基类中(ClassA)添加Amethod方法,这就是存在一个潜在的错误,C#语法会在程序编译的时候提示出警告,需要给派生类(ClassB)重写的方法添加一个关键字“New”,以表示它会隐藏基类中的Amethod方法。 为什么在java中就不需要这么麻烦呢?(在java中,如果不base.Amethod,那就直接认为调用最新的子类中的重写方法。) 那是因为在java中,所有的函数都是虚拟的,可被重写的。但这无疑降低了性能。 看代码理解: 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 }
|
请发表评论