最近正在學習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/