倉庫和物品 堆和棧 值型別和引用型別

2021-08-27 09:26:15 字數 1305 閱讀 1598

struct date

public date(byte yy ,byte mm)

:this(yy,mm,1)

public date(byte yy)

}class brithday

public brithday(byte yy, byte mm)

:this(yy,mm,1)

public brithday(byte yy)}對於

c#中的值型別和引用型別

,查閱了相關資料後

,來談一下自己的理解

:實際上

,我們可以將值型別和引用型別同堆疊的關係比作倉庫與倉庫中堆放的物品

,我們對物品的箱子進行編號

,再將編號記錄在乙個本子上面

,那麼這個本子就是棧

,倉庫就是堆

.對於本子上的資料進行操作

,並不影響物品的情況

,這種型別就是值型別

,類似於

vb中的按值傳遞

;而如果對倉庫裡面的物品進行操作的話

,那麼物品就會發生相應的變化

,這種型別的就是引用型別

,類似於

vb中的按址傳遞;

如:對例

1中定義的結構作如下操作:

// 使用結構

static void usestruct()

顯示結果:

5-15-1

5-11980-11-8

修改其中乙個變數的值,不會影響和它同乙個拷貝的另外乙個變數。

如:對例

1中定義的類進行如下操作:

// 使用類

static void useclass()

顯示結果:

1987-6-12

1987-6-12

1990-3-16

1990-3-16

修改乙個引用的值,另乙個相同的引用的值就會發生改變。

也就是說

:結構是值型別資料

.儲存在棧(

stack

)中。結構進行資料複製的時候,是將原來資料進行備份。建立結構時,結構賦值到的變數儲存該結構的實際資料。將結構賦給新變數時,將複製該結構

.因此,新變數和原始變數包含同一資料的兩個不同的副本。對乙個副本的更改不影響另乙個副本。而引用型別恰好相反.

聯絡vb我們可以想到,

對於c#

中的值型別和引用型別

,我們可以將它們看成

vb中的按值傳遞和按引數傳遞

.c#中的引用型別相似於

vb中的按位址傳遞

,而值型別則類似於

c#中的按值傳遞.

值型別何引用型別,堆和棧

本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是指向物件資...

值型別和引用型別,棧和堆的含義

原文出自 本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是...

值型別和引用型別,棧和堆的含義

本文主要是討論棧和堆的含義,也就是討論 c 的兩種類據型別 值型別和引用型別 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。引用型別如 string,object,class等總是在從託管堆上分配的,c 中new操作符返回物件的記憶體位址 也就是指向物件資...