C#基本常識系列八const和readonly症結字具體引見。本站提示廣大學習愛好者:(C#基本常識系列八const和readonly症結字具體引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C#基本常識系列八const和readonly症結字具體引見正文
媒介
不曉得年夜家對const和readonly這兩個症結字的差別有甚麼懂得,本來本身之前還真不清晰它們究竟是怎樣回事,那末假如你也不是很清晰的話,可以一路來商量一下。在懂得這兩個症結字的時刻我們先來懂得一下靜態常量和靜態常量。
靜態常量:是指編譯器在編譯時刻會對常量停止解析,並將常量的值調換成初始化的誰人值。
而靜態常量的值則是在運轉的那一刻才取得的,編譯器編譯時代將其標示為只讀常量,而不消常量的值取代,如許靜態常量不用在聲明的時刻就初始化,而可以延遲到結構函數中初始化。如今再來講明const與readonly吧。
readonly和const
const潤飾的常量是上述中的第一種,即靜態常量;而readonly則是第二種,即靜態常量。那末差別可以經由過程靜態常量與靜態常量的特征來講明:
1、const潤飾的常量在聲明的時刻必需初始化;readonly潤飾的常量則可以延遲到結構函數初始化
2、const潤飾的常量在編譯時代就被解析,即常量值被調換成初始化的值;readonly潤飾的常量則延遲到運轉的時刻
3、const潤飾的常量重視的是效力;readonly潤飾的常量重視靈巧
4、const潤飾的常量沒有內存消費;readonly由於須要保留常量,所以有內存消費
5、const只能潤飾基元類型、列舉類、或許字符串類型;readonly卻沒有這個限制
第一個例子:
假如在const後面加了一個static的話,那明顯是毛病的,由於const編譯以後就曾經是static靜態字段了
在編譯以後const 變量就會被調換成變量的值了,這也就是為何說它是高效了。
const double pi = 3.1415926;
static void Main(string[] args)
{
Console.WriteLine(pi);
Console.ReadLine();
}
打印變量的代碼編譯以後就曾經是
Console.WriteLine((double) 3.1415926);
第二個例子:
接上去看一下readonly的小例子
class Person
{
public readonly string Name;
public Person(string name)
{
this.Name = name;
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person("aehyok");
person.Name = "Leo";
Console.ReadLine();
}
}
Person實例 name 在結構函數中被賦值後就弗成變,上面的代碼在編譯後會報錯
接上去我們看一下別的一種情形
class Person
{
public string Name;
public Person(string name)
{
this.Name = name;
}
}
class Worker
{
public readonly Person Person;
public Worker(Person person)
{
this.Person = person;
}
}
class Program
{
static void Main(string[] args)
{
Worker worker = new Worker(new Person("aehyok"));
worker.Person = new Person("Leo");
worker.Person.Name = "Leo";
Console.ReadLine();
}
}
來看編譯後的後果
這一點不知能否可以說是readonly的靈巧呢
第三個例子:
class Program
{
static readonly int A = B * 10;
static readonly int B = 10;
public static void Main(string[] args)
{
Console.WriteLine("A is {0},B is {1} ", A, B);
Console.ReadLine();
}
}
成果很簡略
事理也比擬簡略,就是static readonly是靜態常量,變量的值在編譯時代不予以解析,所以開端都是默許值,像A與B都是int類型,故都是0。而在法式履行到A=B*10;所以A=0*10=0,法式接著履行到B=10這句時刻,才會真實的B的初值10賦給B。
總結
關於const和readonly這兩個症結字今朝來講,也算是有所懂得了,照樣學了很多器械,假如看完本文還有疑問的話,你可以經由過程微軟供給的ILDASM對象。
翻開cmd敕令以後,輸出ILDASM。
翻開exe文件停止檢查IL履行進程,漸漸研討吧。