C# 中const,readonly,static的使用小結(jié)
平時在開發(fā)時經(jīng)常會用到 const,readonly,static 關鍵字,可以肯定這些關鍵詞是完全不同的概念,但有時候他們在用法上很相似以至于在場景中不知道選擇哪一個,這篇文章我們就來討論 C# 中的 const,static 和 readonly 關鍵詞,放在一起比較一下看看如何選擇。
理解 const
const 常用來定義一個常量,什么意思呢?就是這個常量在你程序的生命周期內(nèi)都不會被改變,因此,必須在聲明常量時為其賦值,從技術角度上來說:這個常量值又被稱為 編譯時 值,用 const 定義的變量又被稱為 編譯時 常量,值得注意的是: 這個常量是不可變的,也就是一旦被定義好之后不可以對其進行修改。
下面的代碼片段展示了如何使用 const 去定義這個 編譯時 常量。
const string connectionString = "Specify your database connection string here.";
一定要記住,常量必須在定義的時候給它賦值,同時也要記住不可以用 const 定義 object 類型,因為它只支持 C# 的基元類型,比如:ints, floats, chars, booleans 和 strings,接下來通過一個例子來了解以下為啥不能用 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
只讀關鍵詞 readonly 常用于將一個變量或者一個對象設置為只讀,意味著這個變量或者對象只能在 類作用域 或者 構(gòu)造函數(shù) 中被第一次賦值,一旦被賦值后,你就不能通過任何方法對其修改,除了構(gòu)造函數(shù),接下來看一個例子,考慮下面的 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";
}
}
上面的代碼會編譯報錯,錯誤信息如下:

理解 static
static 關鍵詞可用于 變量,方法,對象。不過值得注意的是: 類中的 static 成員只歸屬于類,而不是類實例,換句話說,可以直接使用類名來訪問靜態(tài)屬性或者靜態(tài)方法,而不是通過類實例訪問,接下來考慮一下 Utility 類。
public class Utility
{
public static void SomeMethod()
{
//Write your code here
}
}
你不可以通過 類實例 去調(diào)用,否則編譯器是不會放行的,如下圖:

正確的做法如下:
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)驗法則如下:
const
如果變量在應用程序的生命周期內(nèi)不會被改變,請用 const。
readonly
如果你不確定這個變量后期是否要被修改,但又不希望其他的類碰它,請用 readonly。
static
如果你希望類成員是屬于類型而不是類型的實例,請用 static。
譯文鏈接:https://www.infoworld.com/art...
以上就是C# 中使用const,readonly,static的示例的詳細內(nèi)容,更多關于C# 中使用const,readonly,static的資料請關注腳本之家其它相關文章!
相關文章
提高C# StringBuilder操作性能優(yōu)化的方法
本篇文章主要介紹使用C# StringBuilder 的項目實踐,用于減少內(nèi)存分配,提高字符串操作的性能。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-11-11
C#獲取兩個數(shù)的最大公約數(shù)和最小公倍數(shù)示例
本文介紹了使用C#獲取兩個數(shù)的最大公約數(shù)和最小公倍數(shù)的示例,大家參考使用吧2014-01-01
C#事務處理(Execute Transaction)實例解析
這篇文章主要介紹了C#事務處理(Execute Transaction)實例解析,對于理解和學習事務處理有一定的幫助,需要的朋友可以參考下2014-08-08

