初解C 類 結構 弱引用

2022-03-14 06:25:30 字數 2207 閱讀 2661

一、類

類中的資料和函式稱為類的成員

資料成員是包含類的資料----欄位、常量和事件的成員。資料成員可以是靜態資料、類成員總是例項成員,除非用static進行顯示的宣告。

事件是類的成員,在發生某些行為(如改變類的字段或屬性,或者進行了某種形式的使用者互動操作)時,他可以讓物件通知呼叫方,呼叫方可以包含所謂「事件處理程式」的**來響應該事件。

函式成員提供了操作類中資料的某些功能,包括方法、屬性、建構函式和終結器(finalizer)、運算子以及索引器。

(1)方法是與某個類相關的函式,與資料成員一樣,函式成員預設為例項,使用static修飾符可以把方法定義為靜態方法

(2)屬性是可以從客戶段訪問的函式組,其訪問方式與訪問類的公共字段類似。c#為讀寫類中的屬性提供了專用語法,所以不必使用那些名稱中嵌有get或set的方法。因為屬性的這種語法不同於一般函式的語法,在客戶端**中,虛擬的物件被當作實際的東西

(3)建構函式是在例項化物件時自動呼叫的特殊函式,它們必須與所屬的類同名,且不能有返回型別。建構函式用於初始化欄位的值

(4)終結器類似建構函式,但是在clr檢測到不再需要某個物件時呼叫它,它們的名稱與類相同,但前面有乙個「~」符號,不可能**什麼時候呼叫終結器

(5)運算子執行最簡單的操作就是加法和減法,c#還允許運算子過載

如下是乙個包含靜態建構函式和索引的類的定義和測試

class

program

catch

(argumentoutofrangeexception e)

console.readkey();}}

public

class

userpreferences

public

string name

static

userpreferences()

string days = ;

//串聯建構函式

public

userpreferences()

public userpreferences(int age) : this(age, ""

)

public userpreferences(string name) : this(0

, name)

public userpreferences(int age, string

name)

public

intthis[string

day]

}//////

定義索引器獲取資料的方法

/// ///

///private

int getday(string

testday)

}throw

new argumentoutofrangeexception(testday, "

testday must be in the form \"sun\", \"mon\", etc");

}}

從中可以得出靜態建構函式的特性:乙個類(結構)只能定義乙個靜態建構函式,靜態建構函式不允許訪問修飾符並且不能接受任何引數,無論建立多少個類例項,靜態函式知執行一次、clr建立類例項或首次呼叫類靜態成員前,clr會呼叫靜態建構函式、靜態建構函式先於例項級別的其他建構函式執行。參考

二,結構

結構是值型別,不是引用型別。它們儲存在棧中或儲存未內聯,其生存期的限制和簡單的資料型別一樣,對於結構:不支援繼承,編譯器總是提供乙個無參的預設建構函式,並且不允許替換,使用結構可以指定字段如何在記憶體中布局,預設的建構函式把數值初始化為0,把引用型別初始化為null,且總是隱式指出的,如下定義的結構:

struct

dimensions

}

三、弱引用

弱引用允許建立和使用物件,但是gc執行時就會**物件並釋放記憶體,當object比較大時運用弱引用是合理的,如下:

weakreference userreference = new weakreference(new userpreferences(3, "

yoyo

"));

userpreferences usermodel;

if(userreference.isalive)

在弱引用建立時,會向其建構函式傳遞乙個新的引用物件,在要重新訪問物件是必須通過isalive屬性來判斷物件是否被gc**,如果被**的話要重新建立。

C 強引用和弱引用

鏈結器處理強引用和弱引用的過程幾乎是一樣的,只是對於未定義的弱引用,鏈結器不認為它是乙個錯誤,一般預設其為 0 位址為 0 或者是乙個特殊的值,以便程式 能夠識別。attribute weak extern int a printf a d n a 我們可以將它編譯成乙個可執行檔案,gcc 並不會報...

C 中的弱引用

了解弱引用之前,先了解一下什麼是強引用 例如 object obj new object 就是乙個強引用,記憶體分配乙份空間給用以儲存object資料,這塊記憶體有乙個首位址,也就是obj所儲存的資料,記憶體分配的空間中不僅僅儲存著object物件資訊,還儲存著自己 object本身 被引用的次數。...

C 中的弱引用

了解弱引用之前,先了解一下什麼是強引用 例如 object obj new object 就是乙個強引用,記憶體分配乙份空間給用以儲存object資料,這塊記憶體有乙個首位址,也就是obj所儲存的資料,記憶體分配的空間中不僅僅儲存著object物件資訊,還儲存著自己 object本身 被引用的次數。...