值型別與引用型別關係

2021-04-29 00:31:47 字數 1304 閱讀 9122

引用型別包括:類(class)、介面(inte***ce)、陣列(array)、委託(delegate)、object和string。其中草藥object和string是兩個比較特殊的型別。string型別是乙個從object類直接繼承的密封型別,不能再被繼承,其實例表示unicode字串。

可以把值型別與引用型別的值賦給object型別變數,因為object是c#中所有型別(包括所有的值型別與引用型別)根類。c#用「裝箱」與「拆箱」來實現值型別與引用型別之間的轉換。

裝箱 就是裝值型別包裝成引用型別的處理過程。當乙個值型別被要求轉換成乙個object物件時,裝箱操作自動進行,它首先建立乙個物件例項,然後把值型別的值複製到這相物件例項,最後由object物件引用這個物件例項。

例如:using system;

class demo

public static void main()

int x=123;

object obj1=x;                   //裝箱操作,裝值型別x賦給object型別的obj1變數

x=x+100;                           //改變x的值,此時obj1的值不會隨之改變

console.writeline("x=",x);                    //x=223

console.writeline("object=",obj1);       //obj1=123

拆箱操作與裝箱操作相反,它是將乙個object型別轉換成值型別。首先檢查由object引用的物件例項型別的包裝值,然後包例項中的值拷貝到值型別的變數中。

例如:using system;

class demo

public static void main()

int x=123, y;

object obj1=x;                  //裝箱操作,裝值型別x賦給object型別的obj1變數

x=x+100;                          //改變x的值,此時obj1的值不會隨之改變

y=(int)obj1;                       //拆箱操作,必須進行強制型別轉換

console.writeline("x=",x);                    //x=223

console.writeline("object=",obj1);       //obj1=123

注意:當乙個裝箱操作把值型別轉換成乙個引用型別時,不需要顯式地強制型別轉換;而拆箱操作把引用型別轉換到值型別時,由於它可以強制轉換到任何可以相容的值型別,所以必須顯式地強制型別轉換。

值型別與引用型別

直白點兒說 值型別就是現金,要用直接用 引用型別是存摺,要用還得先去銀行取現。麥機長 我覺得這話十分形象。宣告乙個值型別變數,編譯器會在棧上分配乙個空間,這個空間對應著該值型別變數,空間裡儲存的就是該變數的值。引用型別的例項分配在堆上,新建乙個引用型別例項,得到的變數值對應的是該例項的記憶體分配位址...

值型別與引用型別

工作許久了,可是對c 中的值型別和引用型別卻一直無法很好的理解。這兩天花了不少時間查詢資料,看文章,終於有所收穫,在此將自己理解整理出來,方便日後自己檢視,同時希望對跟我有一樣困惑的朋友有所幫助。廢話不多說,下面開始說說怎麼理解值型別和引用型別!值型別資料直接在他自身分配到的記憶體中儲存資料,而引用...

值型別與引用型別

自動變數型別是指儲存於該程式 程序 堆疊空間的一種變數型別 注意此時的堆疊空間並不是組合語言上的堆疊,只是它的使用及釋放類似於堆疊的過程 這個變數型別的乙個特點是它在程式執行時存在,在程式結束時消失。正是這個過程類似於彙編裡棧的操作,所以才將其命名 處理 為堆疊。我們平時所定義的int之類的型別都屬...