C 字段總結

2022-02-10 14:26:24 字數 1448 閱讀 7348

前沿:

字段(field)是一種資料成員,其中容納了乙個值型別的例項或者乙個引用型別的引用。

正文:由於字段儲存在動態記憶體中,所以他們的值在執行時才能獲取。欄位還解決了常量存在的版本控制問題。此外,字段可以是任何資料型別,不必像常量那樣僅僅侷限於編譯器內建的基元型別。那什麼是基元型別呢(int 、unit等等)?

基元型別:編譯器直接支援的資料型別。如果沒有基元型別,我們在宣告乙個整數的時候應該是這樣子的

int32 a=new int32;

幸運的是有了基元型別,我們可以直接用下面的方法,也就是我們在程式設計的時候經常用到的:

int a=0;

再比如string和string,剛開始我對這兩個型別很困惑,到底什麼時候用哪乙個呢,但是看了基元型別的講解,你就會明白,由於c#的string直接對映到string(fcl型別),所以兩者沒有區別,都可以使用。

clr支援readonly欄位和read、write欄位。大多數欄位都是read和write欄位,這意味著在**執行過程中,字段值可以多次改變。但是readonly欄位只能在乙個構造器方法中寫入。(這個構造器方法只能呼叫一次,也就是物件首次被建立時),編譯器和驗證機制確保readonly欄位不會被構造器以外的方法寫入。但是可以利用反射來修改。

現在我們使用乙個靜態readonly欄位來修正版本控制問題:

1

public

sealed

class

sometype

2

這是唯一需要修改的,應用程式的**不必修改。但是們為了觀察新的行為,必須重新生成他,當應用程式的main方法執行時,clr將載入到dll程式集,並從分配給他的動態記憶體中提取maxlist欄位的值50.

假設dll程式集的開發人員將50改為100,並重新生成程式集。當應用程式**重新執行時,他將自動提取欄位的新值100,在這種情況下,程式不需要重新生成,他可以直接執行。要注意的是,當前假定的是dll程式集的新版本沒有進行強命名。

下面這個演示了如何定義乙個與型別本身關聯的readonly靜態欄位和讀寫字段。另外還定義了read/write靜態字段。

class servicelocator

public string do()

}

在上述**中,許多欄位都是內聯初始化的(就是直接在**中直接賦值來初始化,而不是通過建構函式),c#允許使用這種方法來初始化類的常量、讀寫字段、唯讀字段。c#實際上是在建構函式中對字段進行初始化的,欄位的內聯初始化只是一種語法上的簡化。

注意,當某個欄位是引用型別,並且該字段被宣告為唯讀時,那麼不可改變的是引用本身,而不是引用的物件(也就是分配在堆中的值)。

public static readonly char inva = new char ;

public void test()

;//無法改變引用本身

}

synchronized欄位總結

public class test public void b synchronized this 同乙個物件中synchronized this 修飾的 段都會阻塞 呼叫a方法,不光a方法阻塞b方法中被synchronized this 包圍的 也阻塞 this表示拿到本物件的鎖。public c...

C 經典語法總結(二)屬性和字段

屬性 property 和字段 field 的比較 雖然不是必須的,但是建議將property設定為私有或者可繼承,而通過field來改變property。using system using system.collections.generic using system.linq using sy...

Http頭欄位總結

請求字段 accept 告訴web伺服器自己接受什麼介質型別,表示任何型別,type 表示該型別下的所有子型別,typesub type。accept charset 瀏覽器申明自己接收的字符集。accept encoding 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支援壓縮,支援什麼壓...