readonly:運行時常量,程序運行時賦值,賦值後沒法更改,通常稱爲只讀變量程序員
const:編譯時常量,在編譯時將該常量引用替換爲字面量,通常只能賦值爲數字,字符串,枚舉類型函數
static:靜態變量、靜態方法、靜態類this
靜態變量:對象
特色:繼承
一、經過static關鍵字修飾,是屬於類,實例成員屬於對象,在這個類第一次加載的時候,這個類下面的全部靜態成員會被加載。事件
二、static與非static最大的區別就是static類型的變量及方法在調用的時候就在內存中分配了地址,且這個地址只有一份,故static能夠直接訪問。而非static必需手工去實例化該類,以對象的方式去訪問變量和方法。內存
三、類加載的時候,全部的靜態成員就會被建立在「靜態存儲區」裏面,一旦建立直到程序退出,纔會被回收字符串
四、變量須要被共享的時候,方法須要被反覆調用的時候,就能夠把這些成員定義爲靜態成員編譯
五、在靜態方法中,不能直接調用實例成員,由於靜態方法被調用的時候,對象還有可能不存在。this代表對象自己,而在靜態方法中並無對象概念存在,它只有類自己這個概念,它和對象是屬於兩種互拆的狀態,即我中無你,你中無個人狀況。也就是說你用對象名.靜態變量或對象名.靜態方法是不可訪問的。變量
六、能夠建立這個類的對象,制定對象的成員在靜態方法中操做
七、在實例方法中,能夠調用靜態成員,由於這個時候靜態成員確定存在
八、非靜態類能夠包含靜態的方法、字段、屬性或事件
九、不管對一個類建立多少個實例,它的靜態成員都只有一個副本
十、靜態方法和屬性不能訪問其包含類型中的非靜態字段和事件,而且不能訪問任何對象的實例變量
十一、靜態方法只能被重載,而不能被重寫,由於靜態方法不屬於類的實例成員
十二、雖然字段不能聲明爲 static const,但 const 字段的行爲在本質上是靜態的。這樣的字段屬於類,不屬於類的實例
靜態方法:
一、靜態方法是不屬於特定對象的方法;
二、靜態方法能夠訪問靜態成員變量;
三、靜態方法不能夠直接訪問實例變量,能夠在實例函數調用的狀況下,實例變量作爲參數傳給靜態方法;
四、靜態方法也不能直接調用實例方法,能夠間接調用,首先要建立一個類的實例,而後經過這一特定對象來調用靜態方法。
靜態類:
靜態類不能實例化。在聲明一個類時使用static關鍵字,具備兩個方面的意義:首先,它防止程序員寫代碼來實例化該靜態類;其次,它防止在類的內部聲明任何實例字段或方法。C#自動把靜態類聲明爲sealed密封類。
特色:
一、僅包含靜態成員
二、沒法實例化
三、類的本質,是一個抽象的密封類,因此不能被繼承,也不能被實例化
四、不能包含實例構造函數
五、若是一個類下面的全部成員,都須要被共享,那麼能夠把這個類定義爲靜態類