C#中的隱藏方法


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

如果要是項目中前期考慮不足,我沒有在基類(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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM