asp.net(c#) static關鍵字用法小結

來源:互聯網
上載者:User

靜態變數

       當我們編寫一個類時,其實就是在描述其對象的屬性和行為,而並沒有產生實質上的對象,只有通過new關鍵字才會產生出對象,這時系統才會分配記憶體空間給對象,其方法才可以供外部調用。

       有時候,我們希望無論是否產生了對象或無論產生了多少對象的情況下,某些特定的資料在記憶體空間裡只有一份,例如所有的中國人都有國家名稱,每一個中國人都共用這個國家名稱,不必在每一個中國人的執行個體對象中都單獨分配一個用於代碼國家名稱的變數。例子:

protected void Page_Load(object sender, EventArgs e)
{       
    //直接使用“類名.成員”的格式,不能使用“對象名.成員”的格式,這點與JAVA不一樣,JAVA兩種都可以使用
    Response.Write(Chinese.Country);    
}

 class Chinese
 {
    public static string Country = "中國";
    public void getCountry()
    {
        //類中的成員方法也可以直接存取靜態成員變數
        HttpContext.Current.Response.Write("你好!" + Country);
    }
}

需要注意的是:不能把任何方法體內的變數聲明為靜態,如下面這樣是不行的:

public void getCountry()
{
            //類中的成員方法也可以直接存取靜態成員變數
            HttpContext.Current.Response.Write("你好!" + Country);
            static int i = 1;
}

靜態方法

       我們有時也希望不必建立對象就可以調用某個方法,換句話說也就是使該方法不必和對象綁定在一起。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字就可以了,我們稱這種方法為靜態成員方法,還可以在類的非靜態成員方法中象訪問其他靜態方法一樣去訪問這個靜態方法,例子:

protected void Page_Load(object sender, EventArgs e)
{            
    Chinese.getCountry();
}

 class Chinese
 {
    public static void getCountry()
    {
        HttpContext.Current.Response.Write("你好!中國");
    }
}

注意:在靜態方法裡只能直接調用同類中其他的靜態成員(包括變數和方法),而不能直接存取類中的非靜態成員。這是因為,對於非靜態方法和變數,需要先建立類的執行個體對象後才可以使用,而靜態方法在使用前不用建立任何對象。

const和static readonly的確很像:通過類名而不是對象名進行訪問,在程式中唯讀等等。在多數情況下可以混用。
二者本質的區別在於,const的值是在編譯期間確定的,因此只能在聲明時通過常量運算式指定其值。而static readonly是在運行時計算出其值的,所以還可以通過靜態建構函式來賦值。

要理解static,就必須要先理解另一個與之相對的關鍵字,很多人可能都還不知道有這個關鍵字,那就是auto,其實我們通常聲明的不用static修飾的變數,都是auto的,因為它是預設的,就象short和long總是預設為int一樣;我們通常聲明一個變數:
     int a;
     string s;
     其實就是:
     auto int a;
     auto string s;
     而static變數的聲明是:
     static int a;
     static string s;
     這樣似乎可以更有利於理解auto和static是一對成對的關鍵字吧,就像private,protected,public一樣;
     對於static的不理解,其實就是對於auto的不理解,因為它是更一般的;有的東西你天天在用,但未必就代表你真正瞭解它;auto的含義是由程式自動控制變數的生存周期,通常指的就是變數在進入其範圍的時候被分配,離開其範圍的時候被釋放;而static就是不auto,變數在程式初始化時被分配,直到程式退出前才被釋放;也就是static是按照程式的生命週期來分配釋放變數的,而不是變數自己的生命週期

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.