引用型別和值型別

2021-05-21 22:07:50 字數 851 閱讀 4653

c#中值型別和引用型別作為方法引數傳遞的時候其實都可以說是「值」的傳遞,只不過這裡的「值」指代的東西有所區別。

當方法的引數為值型別時,方法傳遞的是值本身的值。

當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。

舉個引用型別作為引數傳遞的例子

static

void

main()

private

static

void

addref(argsref abf)

class

argsref

假設main方法中argsref abf=new argref();中abf的堆疊位址為0x10;則在方法傳遞的過程中addref(abf);實際上是傳遞的乙個位址指向,而這個位址指向也是原來位址的乙個拷貝。
嚴格意義上也是「值」傳遞,類似於abf=0x10;
在把demo中的注釋去掉的情況下:進到方法addref中,如果又執行一次abf=new argsref();此時則更改了abf的位址,將新的位址賦給了abf,假設是0x11。此時在方法體裡面
abf實際上是0x11指向的物件。而main方法中console.writeline(abf.i)中的abf的位址還是0x10,
因為方法傳遞引用引數的時候是傳遞的位址的拷貝,這一點和值型別傳遞的時候傳遞值的乙個拷貝是一致的。
所以:

1上面的例子中,如果方法addref的第一行注釋掉的話,main方法裡面輸出的結果是:20,20;如果把注釋去掉的話輸出的結果是:20,10

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...

值型別和引用型別

變數 常量和杖舉 常量 用來代替乙個數或字串的名稱,我們可以在初始化時定義。在變數前增加關鍵字 const 就可以把這個變數設定為常量。語法如下 訪問修飾符 const 資料型別 常量名 值 注 常量在使用過程中是不能被修改的,如果要修改乙個常量的話程式會發生錯誤。杖舉 事先考慮到某一變數可能取得值...