c#隱藏和重寫基類方法的異同


最近正在學習c#,對其中的方法重寫和隱藏的概念很是模糊,現在將其歸納如下:

1:方法重寫:就是在基類中的方法用virtual關鍵字來標識,然后在繼承類中對該類進行重寫(override),這樣基類中的方法已經被重寫了,已經失去了功能了。當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用的繼承類的方法。

2:方法隱藏:無論基類中的方法是否用了virtual關鍵字,繼承類中都可以用new關鍵字(如果不用new的話,不會產生錯誤,但會生成一個編譯警告)將基類中的方法隱藏,所謂隱藏就是隱藏,不像重寫,重寫就是原來的(基類中)已經不存在了,而隱藏是原來的還存在。所以當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用的基類的方法。

代碼如下:

 1 public class BaseClass
 2     {
 3         public void functionA()
 4         {
 5             Console.WriteLine("BaseFunctionA http://www.cnblogs.com/sosoft/");
 6         }
 7         public virtual void functionB()
 8         {
 9             Console.WriteLine("BaseFunctionB http://www.cnblogs.com/sosoft/");
10         }
11     }
12    public class DerivedClass:BaseClass
13     {
14         public new void functionA()
15         {
16             Console.WriteLine("DerivedFunctionA http://www.cnblogs.com/sosoft/");
17         }
18         public override void functionB()
19         {
20             Console.WriteLine("DerivedFunctionB http://www.cnblogs.com/sosoft/");
21         }
22     }

當利用多態性執行下面代碼時:

BaseClass baseFunction=new DerivedClass();
baseFunction.functionA();
baseFunction.functionB();

得到的結果是:

BaseFunctionA http://www.cnblogs.com/sosoft/

DerivedFunctionB http://www.cnblogs.com/sosoft/

 

 

 

開發技術文章:http://www.cnblogs.com/sosoft/p/kaifajishu.html


免責聲明!

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



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