程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# static 干貨全解析,

C# static 干貨全解析,

編輯:C#入門知識

C# static 干貨全解析,


講解順序

  • 背景

  • 靜態字段

  • 靜態函數

  • 靜態方法

  • 疑問解答


  • 背景

    • static來源

     

    在編寫類的時候,有時候需要類裡面的某個成員具有唯一性,也就是,對所有的對象都保持只有一個的狀態。比如創建個人信息,我們都是中國人,但總不能每個人都要保存一個中國人字段吧,用一個就夠了

    • static作用

     

    MSDN說:使用 static 修飾符聲明屬於類型本身而不是屬於特定對象的靜態成員。也就是說,用static修改的對象是一個類的全部成員,不屬於某個類特有的。比如,轎車有四個輪子,而不是某種轎車有四個輪子。

    • static特性

     

    1、訪問不需要聲明類對象。比如

    Console.Write();//Write()這就是一個靜態方法,不需要new Consolo();

    2、 static對象具有唯一性,無論是否產生了對象或無論產生了多少對象的情況下,某些特定的數據在內存空間裡只有一份。也就是說,你無論new多少類成員,靜態變量只有一個,要變都變。


    靜態字段

    所謂靜態字段,也就是有static修改的字段啦(對,就是廢話o(∩_∩)oj_0028.gif )。

     

    • 作用

    無論創建多少對象,靜態字段代表的數據在內存空間中只有一個。比如說系統時間,無論你安裝了多少軟件,想知道現在幾點了,都只有一個參考值,如果你改變了這個時間,那麼其他軟件獲取的時間也都改變了。(當然,只是舉例,具體咋訪問時間的,俺不管)。

    • 操作順序

    靜態字段是在類操作(實例化、調用靜態方法等)的時候第一個被實例化的對象。第二個是靜態構造函數,而且他倆都只能被調用一次。

    • 特性

    
    
    • 舉例

    ·如上圖,每次創建實例的時候,構造函數對兩個字段進行+1,但是結果不一樣,這就是static修飾的字段的唯一性

     


    靜態構造函數

    • 作用

    靜態構造函數一般用來初始化靜態變量,不會初始化非靜態變量;但是因為非靜態構造函數也能操作靜態變量,所以就比較少用靜態構造函數了。

    • 操作順序

    無論對類進行何種操作,靜態構造函數總是除了靜態字段以外第一個被操作的方法,比非靜態參數、非靜態構造函數都要提前。

    • 特性
    
    

     

    • 舉例
    class A
        {
            public static int X;
    
            static A()
            {
                X = B.Y + 1;
            }
        }
        class B
        {
            public static int Y = A.X +1;
            static B()
            {
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine(string.Format("Y={0}, X={1}", B.Y, A.X));//Y=2, X=1;
                Console.ReadLine();          
            }
        }

    這是網上一個很有名的static的例子,如果不看答案,能夠算出來才是本事。

    能夠將完整的順序描述出來,static一般的面試題都難不住你了(我的意思是我很牛j_0015.gif掰)


    靜態方法

    • 應用

    靜態方法一般用於頻繁調用又不經常修改的地方。比如連接數據庫的基本語句。當然,這個特性也是因為靜態方法無法被繼承,無法進行擴展有關。

    • 操作順序

    靜態方法會在靜態字段、靜態構造函數都操作後才能被調用。

    • 特性

    
    


    疑問解答

  • 靜態變量與非靜態變量最大的區別是什麼?

    最大的區別在於內存的位置。靜態變量的內存是在程序開始執時變量就占用了內存,直到整個程序結束時變量才釋放內存. 非靜態變量是在程序運行到該步的時候分配內存,並在執行完後自動銷毀。所以:靜態變量的值只會初始化一次,後面每次訪問,都是上次處理過的值。

  • 為什麼靜態變量不需要實例化就能訪問。

    因為類在初始化的時候,就已經為靜態變量分配好了內存空間,不需要實例化就能准確找到它們的位置;而非靜態成員必須在實例化類對象以後,才能確定它們的內存位置;因此也有這樣的說法,靜態成員是屬於類,而非靜態成員屬於類的對象

    為什麼靜態方法裡面不能訪問非靜態變量,也不能創建非靜態變量?

  • 因為非靜態變量需要實例化才能確認其內存中的位置,才能調用,而靜態函數是不需要實例化的,所以靜態方法不能使用

  • 為什麼方法內部不能聲明靜態變量?

    因為靜態變量是類所有實例的共用變量,也就是在該類的范疇內是個全局變量。而如果在方法內部定義靜態變量,則會導致定義的靜態變量是一個局部變量,如此定義自然會出錯。

  • 靜態成員的生命周期

    靜態成員的生命周期是整個應用程序域的生存周期.也就是從操作含有靜態成員的類開始,一直到整個應用程序結束。


  • 以上信息都是我參考無數資料自己整理的,當然有可能出現一些錯誤,歡迎大嬸們指正,我會努力修改好,讓這篇文章作為一篇優秀的static參考資料。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved