標籤:stat 對象 bsp over cto 來源 引用 style fun
1:方法重寫:就是在基類中的方法用virtual關鍵字來標識,然後在繼承類中對該類進行重寫
(override),這樣基類中的方法在子類中已經被重寫了,基類中的方法在子類中已經失去了功能
了。當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用的繼承類中重
寫的方法。
2:方法隱藏:無論基類中的方法是否用了virtual關鍵字,繼承類中都可以用new關鍵字(如果不用new
的話,不會產生錯誤,但會產生一個編譯警告)將基類中的方法隱藏,所謂隱藏就是隱藏,不像重
寫,重寫就是基類中的舊方法在子類中已經不存在了,而隱藏是基類中的方法和子類中重寫得到的新
方法都存在。所以當讓基類的對象的引用直接指向繼承類的對象時(多態性),調用該方法則是調用
的基類的方法。
class BaseClass { public void functionA() { Console.WriteLine("BaseFunctionA ==="); } public virtual void functionB() { Console.WriteLine("BaseFunctionB ==="); } } class DerivedClass : BaseClass { new public void functionA() { Console.WriteLine("DerivedFunctionA ==="); } public override void functionB() { Console.WriteLine("DerivedFunctionB ==="); } } class Program { static void Main(string[] args) { BaseClass b2 = new DerivedClass(); b2.functionA();//BaseFunctionA === b2.functionB();//DerivedFunctionB === Console.WriteLine("-----"); BaseClass b = new BaseClass(); b.functionA();//BaseFunctionA === b.functionB();//BaseFunctionB === Console.WriteLine("-----"); DerivedClass d = new DerivedClass(); d.functionA();//DerivedFunctionA === d.functionB();//DerivedFunctionB === Console.WriteLine("-----"); } }
來源:http://blog.51cto.com/745559847/1857264
[轉] C# 隱藏方法和重寫方法