c#引用類型和值類型

C#中,變量是值還是引用僅取決於其數據類型。下面小編爲大家介紹c#引用類型和值類型,希望能幫到大家!

c#引用類型和值類型

CLR支持兩種類型:引用類型和值類型。

引用類型總是從託管堆上分配的。

c#中的New操作符返回對象的內存地址。

引用對象的注意點:

1、內存從託管堆中分配

2、堆上分配對象,有一些額外的操作,影響一些性能的.

3、從託管堆中分配一個對象時,可能強制執行一次垃圾回收。

CLR中的值類型是輕量級的。不需要提領一個指針,不需要垃圾回收,可以減少垃圾回收的次數。

在CLR中一般稱爲“類”的都是引用類型,所有的值類型都稱爲結構或者枚舉。

所有的結構都是抽象類ValueType的直接派生類。ValueType是直接從Object派生的。

所有的枚舉都是從Enum抽象類中派生的,Enum又是從ValueType派生的。

一個值類型可以實現一個或者多個接口,但是不能繼承基類。所有的值類型都是隱式密封的。

c#中用struct聲明結構,class聲明類。

值類型應滿足:

1、類型具有基元類型

2、類型不需要從其他任何類型繼承

3、不會作爲基類

4、類型的大小不要超過16k

值類型和引用類型的不同點:

1、不能將值類型作爲基類型

2、引用類型變量包含的是堆上的一個對象地址。值類型是值對象本身。

3、值類型賦值的時候會執行一次逐字段的複製,引用類型變量賦值的時候,只複製內存地址。

4、引用類型的多個變量可能引用堆中的同一個對象,值類型是自成一體的,互不影響的。