const,readonly欄位的取捨!

2022-05-02 21:33:09 字數 935 閱讀 7294

如果想在類中定義某些常量字段,一般有兩種選擇,可以定義成const,也可以定義成readonly,這兩種方式如何取捨呢?

在絕大多數情況下,readonly是要優於const的,因為readonly可以帶來更大的靈活性!一般我們可以認為const是編譯時常量,也就是說你引用const欄位,在編譯的時候就被替換成相應的常量值了!

例如:public class myclass

public const int count=0;

static void main(string args)

int i=myclass.count ;

在編譯器看來,main方法實際上相當於這樣:

static void main(string args)

int i=0;

而readonly欄位剛好和const欄位相反,我們可以認為他是執行時常量,也就是說你引用readonly欄位,他的值是執行時確定的,這樣就帶來了很大的靈活性

而const有時可能會破壞二進位制的相容性,看我們剛才那個例子,比如你的myclass是定義在另外乙個dll中而當前的專案是引用這個dll的,這到是沒有什麼問題!但是將來需求突然改變了,如果count需要賦值為100了,這樣你不得不修改**,發布乙個dll的新版本!由於const欄位是編譯時常量,所有引用這個欄位的**在編譯的時候就已經被替換為相應的值了(值是0),這樣帶來的問題是所有引用這個欄位的程式集都需要重新編譯才能正確執行,這樣就破壞了二進位制的相容性!

而使用readonly欄位就可以避免這個問題,因為所有引用readonly欄位的**編譯的時候並沒有被替換成欄位的值!

那const是不是沒有任何的優點了呢?

實際上編譯時常量在效率上是優於執行時常量的,但是差別並不是很大 !

只有你真正的確定這個欄位的值永遠都不會變了,這時才使用const,這時可以獲得有限的效能改善!

否則,最好使用readonly欄位!

Mysql 新增字段 修改字段 刪除字段

alter table 表名 add 欄位名 字段型別 字段長度 default 預設值 comment 注釋 例如 alter table order add code char 6 default null comment 優惠碼 2 修改字段 修改欄位名 字段型別 長度 a 修改欄位名 alt...

Mysql 新增字段 修改字段 刪除字段

alter table 表名 add column 欄位名 字段型別 字段長度 default 預設值 comment 注釋 例如 alter table order add column code char 6 default null comment 優惠碼 2 修改字段 修改欄位名 字段型別 ...

oracle增加字段 刪除字段 修改字段型別

增加一列 alter table emp4 add test varchar2 10 修改一列 alter table emp4 modify test varchar2 20 刪除一列 alter table emp4 drop column test 這裡要注意幾個地方,首先,增加和修改列是不需...