C 程式設計(十五) 唯讀字段

2021-09-07 09:31:40 字數 1468 閱讀 8225

唯讀字段

當欄位宣告中含有 readonly 修飾符時,該宣告所引入的字段為唯讀字段。給唯讀欄位的直接賦值只能作為宣告的組成部分出現,或在同一類中的例項建構函式或靜態建構函式**現。(在這些上下文中,唯讀字段可以被多次賦值。)準確地說,只在下列上下文中允許對 readonly 字段進行直接賦值:

在用於引入該字段的變數宣告符中(通過新增乙個變數初始值設定項)。

對於例項字段,在包含字段宣告的類的例項建構函式中;對於靜態字段,在包含字段宣告的類的靜態建構函式中。也只有在這些上下文中,將 readonly 字段作為 out 或 ref引數傳遞才有效。

在其他任何上下文中,試圖對 readonly 字段進行賦值或將它作為 out 或 ref 引數傳遞都會導致乙個編譯時錯誤。

常量成員和唯讀成員的對比

宣告乙個常量成員 : public const int months=12

成員常量的特徵如下:

1.可以有修飾符(預設為private)

2.成員常量必須在宣告的時候初始化,如果 const int year;(會報錯)

3.成員常量的值在初始化之後是不可改變的,

4.一條魚成可以宣告多個常量

const int months=12,weeks=52,days=365;

months,weeks,days都是常量

5.在宣告常量的時候,可以引用已經宣告的常量

const int dsysofweek=days/weeks;

6.常量就是靜態變數,常量被當做static欄位一樣訪問.

class person

const int age=20;

int age=person.age;

7.不能宣告靜態常量,原因是儲存位置的不同,靜態欄位有儲存位置,常量沒有自己的儲存位置.

宣告靜態常量的時候會報錯.

唯讀字段

使用readonly修飾符宣告唯讀欄位.

class person

readonly int age=20;

person(int age)

this.age=age;

void changeage()

age=19;//在初始化和建構函式之外不允許改變readonly欄位的值.所以這是錯誤的.

1.const欄位只能在宣告語句中初始化,而且必須初始化,初始化之後在任何地方都不能改變;readonly欄位既可以在宣告時初始化,也可以在建構函式中改變它的值:如果是例項唯讀字段,可以在例項建構函式中改變它的值,如果是靜態唯讀字段,則可以在靜態建構函式中改變它的值。

2.const欄位的值必須在編譯器決定,編譯完成之後它的值就被替換為字面量;readonly欄位的值可以在執行時決定,可以在不同的建構函式中設定不同的值。

3.const總是像靜態字段,在類的外部要通過"類名.常量名"的方式訪問;readonly欄位既可以是靜態字段,也可以是例項字段。

4.const在記憶體中沒有儲存位置,而readonly欄位在記憶體中有儲存位置。

MS SQL唯讀字段

最近開發sql想控制某些字段,不能手動直接在sql 編輯更改,因而想到sql唯讀字段功能。就比如實現的使用者鎖定時間,以及密碼過期時間,這兩個字段均是由密碼引數相關設定而系統變更,為了不想讓人為在資料手動更改它們,產生與策略相違的做法,因此insus.net特為此表寫了乙個更新 update 觸發器...

MS SQL唯讀字段

最近開發sql想控制某些字段,不能手動直接在sql 編輯更改,因而想到sql唯讀字段功能。就比如實現的使用者鎖定時間,以及密碼過期時間,這兩個字段均是由密碼引數相關設定而系統變更,為了不想讓人為在資料手動更改它們,產生與策略相違的做法,因此insus.net特為此表寫了乙個更新 update 觸發器...

C 常量資料與唯讀字段

常量資料 c 提供了const關鍵字來定義常量,如果我們要為應用程式定義邏輯上和某個類或結構相關的一組已知值的話,就非常有用。假如我們建立乙個mymathclass的工具類,且需要定義乙個pi值 假如是3.14 如果不希望別的開發者改變pi值,可以使用如下常量定義pi值 class mymathcl...