const和static readonly的區別

2021-05-23 10:44:13 字數 970 閱讀 3959

這個問題雖然很簡單,但有時候也能困擾我們一些新來的同學,const和static readonly的確很像,都在程式中唯讀,都是一旦初始化則都不再可以改寫都是屬於語言的靜態等等。並且在多數情況下可以混用。

區別。const

1.在編譯期間解析的常量

2.必須在宣告就初始化

3.既可用來修飾類中的成員,也可修飾函式體內的區域性變數。

static readonly

1.在執行期間解析的常量,

2.既可以在宣告時初始化也可以在構造器中初始化。

3.只可以用於修飾類中的成員

例子:1.static readonly myclass myclass = new myclass();

//必須使用static readonly,因為new需要在執行時確定

//而const只能必須在編譯時就確定

2.static readonly a = b * 20;

static readonly b = 10;

//可以使用static readonly,顯然可以在執行時確定語句

//也可以使用const

// const a = b * 20;

// const b = 10;

//,編譯器會在編譯時候,就把b編譯為10,a編譯為200,而不是在執行時再計算b * 20

2.有乙個專案,有乙個myint的屬性,定義如下:

public class myclass

另乙個專案中引用該屬性

public class anotherclass

編譯執行程式, i = 5.這是當然的。

但是如果我們改變myclass中的myint的值,改為6.然後編譯myclass所在的專案,生成dll。

再執行程式anotherclass,發現i還是= 5,而不是6!,為什麼?因為在anotherclass中,i已經被定義為5而不是執行時再去取dll的值,所以說const是編譯時就確定了!!!

const物件和const函式

當乙個類的函式的參數列不同時,能過載函式,當函式的const性不同時,也能過載函式。如下所示 include a.h 定義了ca類 class cbigclass const ca getvalue const ca getvalue private ca m value 客戶端 如下 ca ca ...

頂層const和底層const

頂層const 本身是乙個常量 底層const 所指的物件是乙個常量 int const p1 i const修飾p1,p1本身是乙個const,所以這個const是頂層const const int ci 42 const修飾ci,ci本身是乙個const,頂層 const int p2 ci c...

頂層const和底層const

1.頂層 const 與底層 const概念 指標本身是乙個物件,因為,指標實際對應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個完全不同的概念,頂層 const表示的是指標本身是乙個常量,底層const 表示的是指標所指的物件是乙...