通用型別系統概述

2022-02-16 09:13:42 字數 1371 閱讀 6465

今天晚上看了.net 通用型別  的結構 , 以前沒有對它深入學習,對ta 的認識很很侷限, 只知道怎麼用,不懂原理,就像俗話說的知其然不知其所以然。  以前對這些基礎知識掌握的不牢靠,  現在想通過 寫博文的方式加強記憶, 寫的不好的地方還請大家 指出 ,我們一起討論 ....  (本人表達能力急待加強,汗顏 ~~~~~)

c#有兩種型別的資料一種是是值型別資料,一種引用型別資料。

一下是msdn的型別圖 :

值型別:值型別的例項代表實際的資料 如(int,float,bool,struct定義的型別 -à datatime)

引用型別:引用型別的例項代表指向資料的指標或者引用 如(string,陣列,class 定義的型別)

兩種型別的儲存方式

值型別:儲存在堆疊中即棧。

.net 對兩種型別的引用流程為:

.net的程式首先要被編譯為il(中間語言),之後再託管執行。值型別直接在堆疊裡面取值就可以,兒引用型別必須要從堆疊裡面取出ta 的位址,在根據這個位址到堆裡面找到對應的值 

以下是值型別和引用型別的具體區別

值型別引用型別

記憶體分配地點

分配在棧中

分配在堆中

效率效率高,不需要轉換位址

效率低,需要進行位址轉換

記憶體**

使用完後,理解**

使用完後,不是立即**,而是通過gc**

賦值操作

進行複製,建立乙個同值新物件

只是對原有物件的引用

函式引數與返回值

是物件的複製

是對原有的物件的引用,而不產生新的物件

易擴充套件性

不易擴充套件

容易擴充套件,方便與型別擴充套件

值型別剖析

1、         c#中的所有值型別均隱式派生自system.valuetype。

2、         每種值型別均有乙個隱式的預設建構函式來初始化該型別的預設值:

例如: int i=new int();

等價於  int32 i=new int32();

等價於  int i=0;

等價於  int32 i=0;

使用new運算子是,將呼叫特定型別的預設建構函式並對變數賦以預設的值。

注意:1、         所有的值型別都是密封的(seal),所以無法派生出新的值型別。

2、         system.valuetype直接派生於system.object。即system.valuetype本身是乙個類型別,而不是值型別。其關鍵在於valuetype重寫了equals()方法,從而對值型別按照例項的值來比較,而不是按照引用位址來比較的

八 通用型別系統

1 通用型別簡介 clr中的一切都圍繞型別展開,因為il是物件導向的高階機器語言.型別向應用程式和其他型別公開了功能.通過型別,用一種程式語言寫的 能與另一種程式語言寫的 溝通.由於型別是clr的根本,所以ms制定了乙個正式的規範來描述型別的定義和行為,這就是 通用型別系統 common type ...

通用ODBC API應用結構概述

無論在visual c 或visual basic中,我們開發資料庫應用程式,都可以通過使用odbc api直接呼叫sql命令來處理資料庫的資料 當然,在此之前必須通過 控制面板 中的 odbc資料來源 建立與資料庫的連線 odbc api是由一組函式呼叫組成的,其核心是sql。odbc函式的主要功...

通用指標型別

以下是通過指標傳遞引數給新執行緒傳遞引數方法 這種方法首先將要傳遞的資料轉換成通用指標型別,然後傳遞給新執行緒,新執行緒再將其還原成原資料型別 void start routine void arg int main void void start routine void arg 這種方法雖然簡單...