介紹
C# 中有兩種類型:ValueType(實值型別)和ReferenceType(參考型別)。 ValueType的變數則會直接存取資料,而ReferenceType的變數會存取資料的參考。
從記憶體配置了解ValueType與ReferenceType
在記憶體配置中Stack、Heap的記憶體空間來比較出ValueType與ReferenceType的差異。
Stack | Heap | |
---|---|---|
ValueType | 儲存"值" | |
ReferenceType | 儲存"參考" | 儲存new出來的實例(取Stack中的"參考"後對應到Heap中的記憶體位址) |
ValueType與ReferenceType的比較
ValueType在處理參數傳遞的時候會複製一份相同的內容在Stack中。
ReferenceType在處理參數傳遞的時候是參考記憶體位置進行處理。
以下是內建的型別供參考 :
ValueType | ValueType | ||
---|---|---|---|
bool | System.Boolean | uint | System.UInt32 |
byte | System.Byte | nint | System.IntPtr |
sbyte | System.SByte | nuint | System.UIntPtr |
double | System.Double | ulong | System.UInt64 |
char | System.Char | long | System.Int64 |
decimal | System.Decimal | short | System.Int16 |
float | System.Single | ushort | System.UInt16 |
int | System.Int32 |
ReferenceType | |
---|---|
object | System.Object |
dynamic | System.Object |
string | System.String |
參考網站 : valueType referenceType