父類中的靜態方法,繼承的子類能不能調用?一直在這里有疑惑,即使在下面的測試之后,也只是得到了結論,不明原理。
class ClsParent { public static void ShowSth() { Console.WriteLine("this is from parent"); } } class ClsChild : ClsParent { //public static new void ShowSth() //{ // Console.WriteLine("this is from child"); //} } static void Main(string[] args) { ClsChild.ShowSth(); }
如果將ClsChild里面的ShowSth注釋掉的情況下,可以編譯通過,鼠標移到Main下面的ShowSth那里,提示ClsParent.ShowSth。說明ClsChild繼承了ClsParent之后,也繼承了ClsParent的這個公開的靜態方法。最終程序運行的結果為"this is from parent"
如果將ClsChild里面的ShowSth取消注釋,鼠標移到Main下面的ShowSth那里,將提示ClsChild.ShowSth。此時的運行結果為"this is from child"。
一直有錯誤的理解,靜態方法是不能繼承的,為函數獨有。現在看來是錯的。
靜態函數的繼承要注意幾點:
1. 盡量用關鍵字new來隱藏父類的靜態方法,為了程序的穩定,避免以后.net升級可能帶來的不必要麻煩。
2. 因為靜態方法是類相關的,與具體的實例無關。所以不能用ClsParent.ShowSth來執行子類的函數,這點要留意。和非靜態函數使用的區別。
.net的繼承到底是什么樣的數據邏輯流向,抱歉不能給出理論的解釋。
純個人的理解來堆砌的文字,能力有限,如果錯誤請更正。另外,如果有對這方面的理論知識很清楚的,望留言指點。
轉載請注明出處:http://www.cnblogs.com/icyJ