這個問題雖然很簡單,但有時候也能困擾我們一些新來的同學,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 表示的是指標所指的物件是乙...