C# 中const,readonly,static的使用小結(jié)
平時(shí)在開發(fā)時(shí)經(jīng)常會(huì)用到 const,readonly,static 關(guān)鍵字,可以肯定這些關(guān)鍵詞是完全不同的概念,但有時(shí)候他們?cè)谟梅ㄉ虾芟嗨埔灾劣谠趫鼍爸胁恢肋x擇哪一個(gè),這篇文章我們就來討論 C# 中的 const,static 和 readonly 關(guān)鍵詞,放在一起比較一下看看如何選擇。
理解 const
const 常用來定義一個(gè)常量,什么意思呢?就是這個(gè)常量在你程序的生命周期內(nèi)都不會(huì)被改變,因此,必須在聲明常量時(shí)為其賦值,從技術(shù)角度上來說:這個(gè)常量值又被稱為 編譯時(shí) 值,用 const 定義的變量又被稱為 編譯時(shí) 常量,值得注意的是: 這個(gè)常量是不可變的,也就是一旦被定義好之后不可以對(duì)其進(jìn)行修改。
下面的代碼片段展示了如何使用 const 去定義這個(gè) 編譯時(shí) 常量。
const string connectionString = "Specify your database connection string here.";
一定要記住,常量必須在定義的時(shí)候給它賦值,同時(shí)也要記住不可以用 const 定義 object 類型,因?yàn)樗恢С?C# 的基元類型,比如:ints, floats, chars, booleans 和 strings,接下來通過一個(gè)例子來了解以下為啥不能用 object,考慮下面的 Author 類。
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } }
如果用 const 將 Author 定義為常量的話,編譯器肯定是不同意的,如下圖:
理解 readonly
只讀關(guān)鍵詞 readonly 常用于將一個(gè)變量或者一個(gè)對(duì)象設(shè)置為只讀,意味著這個(gè)變量或者對(duì)象只能在 類作用域 或者 構(gòu)造函數(shù) 中被第一次賦值,一旦被賦值后,你就不能通過任何方法對(duì)其修改,除了構(gòu)造函數(shù),接下來看一個(gè)例子,考慮下面的 DbManager 類。
public class DbManager { public readonly string connectionString ="Specify your database connection string here."; public DbManager() { connectionString = "You can reassign a value here."; } public void ReAssign() { connectionString = "This is not allowed"; } }
上面的代碼會(huì)編譯報(bào)錯(cuò),錯(cuò)誤信息如下:
理解 static
static 關(guān)鍵詞可用于 變量,方法,對(duì)象。不過值得注意的是: 類中的 static 成員只歸屬于類,而不是類實(shí)例,換句話說,可以直接使用類名來訪問靜態(tài)屬性或者靜態(tài)方法,而不是通過類實(shí)例訪問,接下來考慮一下 Utility 類。
public class Utility { public static void SomeMethod() { //Write your code here } }
你不可以通過 類實(shí)例 去調(diào)用,否則編譯器是不會(huì)放行的,如下圖:
正確的做法如下:
Utility.SomeMethod();
同樣的規(guī)則也適用于 類中的屬性和字段,要想引用類中的靜態(tài)成員,參考如下語法:
ClassName.Member;
或者
ClassName.Member();
構(gòu)造函數(shù)也可以是靜態(tài)的,它通常用于初始化類中的靜態(tài)成員,但要注意靜態(tài)構(gòu)造函數(shù)中不接受任何參數(shù)。
總結(jié)
使用 const,readonly,static 的一些經(jīng)驗(yàn)法則如下:
const
如果變量在應(yīng)用程序的生命周期內(nèi)不會(huì)被改變,請(qǐng)用 const。
readonly
如果你不確定這個(gè)變量后期是否要被修改,但又不希望其他的類碰它,請(qǐng)用 readonly。
static
如果你希望類成員是屬于類型而不是類型的實(shí)例,請(qǐng)用 static。
譯文鏈接:https://www.infoworld.com/art...
以上就是C# 中使用const,readonly,static的示例的詳細(xì)內(nèi)容,更多關(guān)于C# 中使用const,readonly,static的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
提高C# StringBuilder操作性能優(yōu)化的方法
本篇文章主要介紹使用C# StringBuilder 的項(xiàng)目實(shí)踐,用于減少內(nèi)存分配,提高字符串操作的性能。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11C#獲取兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)示例
本文介紹了使用C#獲取兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)的示例,大家參考使用吧2014-01-01C#實(shí)現(xiàn)多線程的Web代理服務(wù)器實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)多線程的Web代理服務(wù)器,涉及C#多線程代理服務(wù)器的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07c#實(shí)現(xiàn)最簡潔的快速排序(你絕對(duì)可以看懂)
這篇文章主要給大家介紹了關(guān)于利用c#實(shí)現(xiàn)如何最簡潔的快速排序,實(shí)現(xiàn)的方法你絕對(duì)可以看懂,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量二
這篇文章繼續(xù)介紹了C#數(shù)據(jù)類型和變量,是對(duì)上一篇文章的補(bǔ)充,希望對(duì)大家的學(xué)習(xí)有所幫助。2015-10-10關(guān)于javascript冒泡與默認(rèn)事件的使用詳解
本篇文章是對(duì)javascript中冒泡與默認(rèn)事件的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#事務(wù)處理(Execute Transaction)實(shí)例解析
這篇文章主要介紹了C#事務(wù)處理(Execute Transaction)實(shí)例解析,對(duì)于理解和學(xué)習(xí)事務(wù)處理有一定的幫助,需要的朋友可以參考下2014-08-08