程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中 const 和 readonly 的區別

C#中 const 和 readonly 的區別

編輯:關於C語言

const readonly 的區別,總是不太清楚,於是查了查資料。

  const 的概念就是一個包含不能修改的值的變量。
常數表達式是在編譯時可被完全計算的表達式。因此不能從一個變量中提取的值來初始化常量。
如果 const int a = b+1;b是一個變量,顯然不能再編譯時就計算出結果,所以常量是不可以用變量來初始化的。


  readonly 允許把一個字段設置成常量,但可以執行一些運算,可以確定它的初始值。
因為 readonly 是在計算時執行的,當然它可以用某些變量初始化。
readonly 是實例成員,所以不同的實例可以有不同的常量值,這使readonly更靈活。


readonly 關鍵字與 const 關鍵字不同。

1. const 字段只能在該字段的聲明中初始化。
   readonly 字段可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly 字段可能具有不同的值。
2. const 字段是編譯時常數,而 readonly 字段可用於運行時常數。
3. const 默認就是靜態的,而 readonly 如果設置成靜態的就必須顯示聲明。
4.const 對於引用類型的常數,可能的值只能是 stringnull
   readonly可以是任何類型

* 需要注意的一個問題是:

對於一個 readonlyReference 類型,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。

public static readonly Class1 my = new Class1();

my.SomeProperty = 10;
//正常
my = new Class1(); //出錯,該對象是只讀的

但是,如果上例中的 Class1 不是一個 Class 而是一個 struct,那麼後面的兩個語句就都會出錯。

static readonly:

Java 中 static 是當載入一個類時執行一次的。

C#中是怎麼執行的,我沒有查到。很奇怪幾乎每本Java的書都會說static的問題,C#的往往只說怎麼用,但是應該是在main函數調用之前初始化,所以static readonly也是運行時的,可以用變量付值,如:

private static readonly string path = System.Windows.Forms.Application.StartupPath + “aaa”;

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