C# 总结const、 readonly、 static三者区别:
總結const、 readonly、 static三者區別:
(有人問我,看似簡單,我也沒能立刻回答出來,總結一下,分享一下。)
const:靜態常量,也稱編譯時常量(compile-time constants),屬于類型級,通過類名直接訪問,被所有對象共享!
a、叫編譯時常量的原因是它編譯時會將其替換為所對應的值;
b、靜態常量在速度上會稍稍快一些,但是靈活性卻比動態常量差一些;
c、靜態常量,隱式是靜態的,即被static隱式修飾過,不能再用static重復修飾,
d、在聲明時初始化;
e、靜態常量只能被聲明為簡單的數據類型(內建的int和浮點型)、枚舉或字符串。
f、應用場合例如:Math.PI的定義(要聲明一些從不改變且處處唯一的常量,就應該使用靜態常量)
readonly:動態常量,也稱運行時常量(runtime constants),屬于對象級,通過對象訪問。
a、而動態常量的值是在運行時獲得的;
b、動態常量在性能上稍差一點,但是靈活性好比前者好;
c、readonly可以被static修飾,這時的static readonly和const非常相似;
d、在聲明時初始化,在構造函數里初始化;(static readonly常量,如果在構造函數內指定初始值,則必須是靜態無參構造函數;)
e、動態常量可以是任意的數據類型。
f、應用場合例如:SqlHelper類的連接字符串定義
二者最大的差別在于:靜態常量在編譯時會將其換為對應的值,這就意味著對于不同的程序集來說,當你改變靜態常量的時候需要將其重新編譯,否則常量的值不會發生變化,可能引發潛在的問題,而動態常量就不會有這種情況,此時推薦使用static readonly,因為其是運行時賦值,當常量值被更改,運行時也隨之更改。
const和static readonly的確很像:通過類名而不是對象名進行訪問,在程序中只讀等等。在多數情況下可以混用。二者本質的區別在于,const的值是在編譯期間確定的,因此只能在聲明時通過常量表達式指定其值。而static readonly是在運行時計算出其值的,所以還可以通過靜態構造函數來賦值。
static:本不應該把static與前兩者放在一起區別對待的,但是static經常和它們攪在一起,所有這里特別把它拿來說個事。static的意義與const和readonly迥然不同,static是指所修飾的成員與類型有關,而與對象無關。
?靜態字段和靜態構造方法,通常適用于于一些不會經常變化而又頻繁使用的數據,比如連接字符串,配置信息等,進行一次讀取,以后就可以方便的使用了,同時也節約了托管資源,因為對于靜態成員,一個靜態字段只標識一個存儲位置。
?非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員。
總結
以上是生活随笔為你收集整理的C# 总结const、 readonly、 static三者区别:的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯哪个软件可以借钱
- 下一篇: 工商星座信用卡额度多少