當前位置:才華齋>計算機>C語言>

c語言引用型別和值型別

C語言 閱讀(1.73W)

CLR支援兩種型別:引用型別和值型別。下面就有小編分享c語言引用型別和值型別,歡迎大家學習!

c語言引用型別和值型別

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

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、引用型別的多個變數可能引用堆中的同一個物件,值型別是自成一體的,互不影響的。