C#中的const和readonly關(guān)鍵字詳解
const和readonly經(jīng)常被用來(lái)修飾類(lèi)的字段,兩者有何異同呢?
const
1、聲明const類(lèi)型變量一定要賦初值嗎?
一定要賦初值
public class Student
{
public const int age;
}生成的時(shí)候,會(huì)報(bào)如下錯(cuò):

正確的應(yīng)該這樣寫(xiě):
public class Student
{
public const int age = 18;
}2、聲明const類(lèi)型變量可以用static修飾嗎?
不可以
public class Student
{
public static const int age = 18;
}生成的時(shí)候,會(huì)報(bào)如下錯(cuò):

正確的應(yīng)該這樣寫(xiě):
public class Student
{
public const int age = 18;
}因?yàn)閏onst默認(rèn)是static。
3、運(yùn)行時(shí)變量可以賦值給const類(lèi)型變量嗎?
不可以
public class Student
{
public const int age = 18;
public Student(int a)
{
age = a + 1;
}
}生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
const類(lèi)型變量是編譯期變量,無(wú)法把運(yùn)行時(shí)變量賦值給編譯期變量。
4、const可以修飾引用類(lèi)型變量嗎?
可以,但只能給引用類(lèi)型變量賦null值。
public class Student
{
public const Teacher teacher = new Teacher();
}
public class Teacher
{
}生成的時(shí)候,會(huì)報(bào)如下錯(cuò):
正確的應(yīng)該這樣寫(xiě):
public class Student
{
public const Teacher teacher = null;
}
public class Teacher
{
}readonly
1、聲明readonly類(lèi)型變量一定要賦初值嗎?
不一定,既可以賦初值,也可以不賦初值。
以下不賦初值的寫(xiě)法正確:
public class Student
{
public readonly int age;
}以下賦初值的寫(xiě)法也對(duì):
public class Student
{
public readonly int age = 18;
}2、運(yùn)行時(shí)變量可以賦值給readonly類(lèi)型變量嗎?
可以
以下在構(gòu)造函數(shù)中給readonly類(lèi)型變量賦值是可以的:
public class Student
{
public readonly int age = 18;
public Student(int a)
{
age = a;
}
}3、聲明readonly類(lèi)型變量可以用static修飾嗎?
可以的
以下寫(xiě)法正確:
public class Student
{
public static readonly int age = 18;
}總結(jié)
const修飾符:
- 用const修飾的變量是編譯期變量
- 不能把運(yùn)行時(shí)變量賦值給const修飾的變量
- const修飾的變量在聲明時(shí)要賦初值
- const修飾的變量不能在前面加static修飾
- cosnt也可以修飾引用類(lèi)型變量,但一定要給引用類(lèi)型變量賦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#通過(guò)實(shí)現(xiàn)winmm枚舉音頻設(shè)備
使用C#做音頻錄制時(shí)需要獲取音頻設(shè)備信息,其中比較簡(jiǎn)單的就是使用winmm,所以本文就為大家介紹一下C#如何通過(guò)實(shí)現(xiàn)winmm枚舉音頻設(shè)備,需要的可以參考下2023-10-10
C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析
#line 指令可能由生成過(guò)程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號(hào)生成輸出,則可以移除行,然后用 #line 模擬原始行號(hào)2014-01-01
C#如何正確實(shí)現(xiàn)一個(gè)自定義異常Exception
這篇文章主要為大家詳細(xì)介紹了C#如何正確實(shí)現(xiàn)一個(gè)自定義異常Exception,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
c# Process.Start()找不到系統(tǒng)文件的解決方法
vs1027在X64應(yīng)用程序下執(zhí)行process.start()時(shí),OK;但是在X86應(yīng)用程序下執(zhí)行process.start(),報(bào)錯(cuò):找不到系統(tǒng)文件,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下2023-09-09
C#基于Modbus三種CRC16校驗(yàn)方法的性能對(duì)比
這篇文章主要介紹了C#基于Modbus三種CRC16校驗(yàn)方法的性能對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
user32.dll 函數(shù)說(shuō)明小結(jié)
這篇文章主要介紹了user32.dll 函數(shù)說(shuō)明,需要的朋友可以參考下2018-06-06



