程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基本常識系列八const和readonly症結字具體引見

C#基本常識系列八const和readonly症結字具體引見

編輯:C#入門知識

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履行進程,漸漸研討吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved