C#中的const和readonly關(guān)鍵字詳解
const和readonly經(jīng)常被用來(lái)修飾類的字段,兩者有何異同呢?
const
1、聲明const類型變量一定要賦初值嗎?
一定要賦初值
public class Student { public const int age; }
生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
正確的應(yīng)該這樣寫:
public class Student { public const int age = 18; }
2、聲明const類型變量可以用static修飾嗎?
不可以
public class Student { public static const int age = 18; }
生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
正確的應(yīng)該這樣寫:
public class Student { public const int age = 18; }
因?yàn)閏onst默認(rèn)是static。
3、運(yùn)行時(shí)變量可以賦值給const類型變量嗎?
不可以
public class Student { public const int age = 18; public Student(int a) { age = a + 1; } }
生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
const類型變量是編譯期變量,無(wú)法把運(yùn)行時(shí)變量賦值給編譯期變量。
4、const可以修飾引用類型變量嗎?
可以,但只能給引用類型變量賦null值。
public class Student { public const Teacher teacher = new Teacher(); } public class Teacher { }
生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
正確的應(yīng)該這樣寫:
public class Student { public const Teacher teacher = null; } public class Teacher { }
readonly
1、聲明readonly類型變量一定要賦初值嗎?
不一定,既可以賦初值,也可以不賦初值。
以下不賦初值的寫法正確:
public class Student { public readonly int age; }
以下賦初值的寫法也對(duì):
public class Student { public readonly int age = 18; }
2、運(yùn)行時(shí)變量可以賦值給readonly類型變量嗎?
可以
以下在構(gòu)造函數(shù)中給readonly類型變量賦值是可以的:
public class Student { public readonly int age = 18; public Student(int a) { age = a; } }
3、聲明readonly類型變量可以用static修飾嗎?
可以的
以下寫法正確:
public class Student { public static readonly int age = 18; }
總結(jié)
const修飾符:
- 用const修飾的變量是編譯期變量
- 不能把運(yùn)行時(shí)變量賦值給const修飾的變量
- const修飾的變量在聲明時(shí)要賦初值
- const修飾的變量不能在前面加static修飾
- cosnt也可以修飾引用類型變量,但一定要給引用類型變量賦null初值
readonly修飾符:
- 用readonly修飾的變量是運(yùn)行時(shí)變量
- 可以把運(yùn)行時(shí)變量賦值給readonly修飾的變量
- readonly修飾的變量在聲明時(shí),既可以賦初值,也可以不賦初值
- readonly修飾的變量可以在前面加static修飾符
到此這篇關(guān)于C#關(guān)鍵字const和readonly的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C# Winform實(shí)現(xiàn)石頭剪刀布游戲
這篇文章主要為大家詳細(xì)介紹了Winform實(shí)現(xiàn)石頭剪刀布游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01DevExpress實(shí)現(xiàn)TreeList向上遞歸獲取公共父節(jié)點(diǎn)的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)TreeList向上遞歸獲取公共父節(jié)點(diǎn)的方法,需要的朋友可以參考下2014-08-08完成OSS.Http底層HttpClient重構(gòu)封裝 支持標(biāo)準(zhǔn)庫(kù)
OSS.Http項(xiàng)目對(duì)于.Net Standard標(biāo)準(zhǔn)庫(kù)的支持已經(jīng)遷移完畢,OSS開源系列兩個(gè)最底層的類庫(kù)已經(jīng)具備跨運(yùn)行時(shí)支持的能力。本篇文章主要包含 1. HttpClient的介紹,2. 重構(gòu)的思路, 3. 容易遇到的問(wèn)題。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02C#實(shí)現(xiàn)給PDF文檔設(shè)置過(guò)期時(shí)間
我們可以給一些重要文檔或者臨時(shí)文件設(shè)置過(guò)期時(shí)間和過(guò)期信息提示來(lái)提醒讀者或管理者文檔的時(shí)效性,并及時(shí)對(duì)文檔進(jìn)行調(diào)整、更新等。下面本文將介紹如何通過(guò)C#來(lái)給PDF文檔設(shè)置過(guò)期時(shí)間的方法。需要的可以參考一下2022-01-01WinForm中實(shí)現(xiàn)picturebox自適應(yīng)圖片大小的方法
這篇文章主要介紹了WinForm中實(shí)現(xiàn)picturebox自適應(yīng)圖片大小的方法,涉及pictureBox控件相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下2017-05-05C#根據(jù)年月日計(jì)算星期幾的函數(shù)小例子
這篇文章介紹了C#根據(jù)年月日計(jì)算星期幾的函數(shù)小例子,有需要的朋友可以參考一下2013-07-07C#實(shí)現(xiàn)char字符數(shù)組與字符串相互轉(zhuǎn)換的方法
這篇文章主要介紹了C#實(shí)現(xiàn)char字符數(shù)組與字符串相互轉(zhuǎn)換的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了C#字符數(shù)組轉(zhuǎn)字符串及字符串轉(zhuǎn)字符數(shù)組的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02