ASP.NET中static關鍵字用法小結
大家對於static關鍵字應該比較眼熟了,但是很多人對static關鍵字不理解,這其實就是對於auto的不理解。 static關鍵字不是auto,變量在程序初始化時被分配,直到程序退出前才被釋放。
靜態變量
我們有時也希望不必創建對象就可以調用某個方法,關鍵字排名換句話說也就是使該方法不必和對象綁定在一起。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字就可以了,我們稱這種方法為靜態成員方法,還可以在類的非靜態成員方法中像訪問其他靜態方法一樣去訪問這個靜態方法,例子:
注意:在靜態方法裡只能直接調用同類中其他的靜態成員(包括變量和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變量,需要先創建類的實例對像後才可以使用,而靜態方法在使用前不用創建任何對象。
當我們編寫一個類時,其實就是在描述其對象的屬性和行為,而並沒有產生實質上的對象,關鍵字廣告只有通過new關鍵字才會產生出對象,這時系統才會分配內存空間給對象,其方法才可以供外部調用。
有時候,我們希望無論是否產生了對像或無論產生了多少對象的情況下,某些特定的數據在內存空間裡只有一份,例如所有的中國人都有國家名稱,每一個中國人都共享這個國家名稱,不必在每一個中國人的實例對像中都單獨分配一個用於代碼國家名稱的變量。
靜態方法
const和static readonly的確很像:通過類名而不是對象名進行訪問,關鍵字排名在程序中只讀等等。在多數情況下可以混用。
二者本質的區別在於,const的值是在編譯期間確定的,因此只能在聲明時通過常量表達式指定其值。而static readonly是在運行時計算出其值的,所以還可以通過靜態構造函數來賦值。
要理解static,關鍵字廣告就必須要先理解另一個與之相對的關鍵字,很多人可能都還不知道有這個關鍵字,那就是auto,其實我們通常聲明的不用static修飾的變量,都是auto的,因為它是默認的,就像short和long總是默認為int一樣;我們通常聲明一個變量:
這樣似乎可以更有利於理解auto和static是一對成對的關鍵字吧,就像private,protected,public一樣;
對於static關鍵字的不理解,其實就是對於auto的不理解,因為它是更一般的;關鍵字廣告有的東西你天天在用,但未必就代表你真正了解它;auto的含義是由程序自動控制變量的生存週期,通常指的就是變量在進入其作用域的時候被分配,離開其作用域的時候被釋放;而static就是不auto,變量在程序初始化時被分配,直到程序退出前才被釋放;也就是static是按照程序的生命週期來分配釋放變量的,而不是變量自己的生命週期
|