.net類中靜態方法的繼承


父類中的靜態方法,繼承的子類能不能調用?一直在這里有疑惑,即使在下面的測試之后,也只是得到了結論,不明原理。

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


免責聲明!

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



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