c# 引用類型和值類型
更新時間:2012年10月29日 13:56:24 作者:
CLR支持兩種類型:引用類型和值類型。引用類型總是從托管堆上分配的
CLR支持兩種類型:引用類型和值類型。
引用類型總是從托管堆上分配的。
c#中的New操作符返回對象的內(nèi)存地址。
引用對象的注意點:
1、內(nèi)存從托管堆中分配
2、堆上分配對象,有一些額外的操作,影響一些性能的
3、從托管堆中分配一個對象時,可能強制執(zhí)行一次垃圾回收。
CLR中的值類型是輕量級的。不需要提領(lǐng)一個指針,不需要垃圾回收,可以減少垃圾回收的次數(shù)。
在CLR中一般稱為“類”的都是引用類型,所有的值類型都稱為結(jié)構(gòu)或者枚舉。
所有的結(jié)構(gòu)都是抽象類ValueType的直接派生類。ValueType是直接從Object派生的。
所有的枚舉都是從Enum抽象類中派生的,Enum又是從ValueType派生的。
一個值類型可以實現(xiàn)一個或者多個接口,但是不能繼承基類。所有的值類型都是隱式密封的。
c#中用struct聲明結(jié)構(gòu),class聲明類。
值類型應滿足:
1、類型具有基元類型
2、類型不需要從其他任何類型繼承
3、不會作為基類
4、類型的大小不要超過16k
值類型和引用類型的不同點:
1、不能將值類型作為基類型
2、引用類型變量包含的是堆上的一個對象地址。值類型是值對象本身。
3、值類型賦值的時候會執(zhí)行一次逐字段的復制,引用類型變量賦值的時候,只復制內(nèi)存地址。
4、引用類型的多個變量可能引用堆中的同一個對象,值類型是自成一體的,互不影響的。
引用類型總是從托管堆上分配的。
c#中的New操作符返回對象的內(nèi)存地址。
引用對象的注意點:
1、內(nèi)存從托管堆中分配
2、堆上分配對象,有一些額外的操作,影響一些性能的
3、從托管堆中分配一個對象時,可能強制執(zhí)行一次垃圾回收。
CLR中的值類型是輕量級的。不需要提領(lǐng)一個指針,不需要垃圾回收,可以減少垃圾回收的次數(shù)。
在CLR中一般稱為“類”的都是引用類型,所有的值類型都稱為結(jié)構(gòu)或者枚舉。
所有的結(jié)構(gòu)都是抽象類ValueType的直接派生類。ValueType是直接從Object派生的。
所有的枚舉都是從Enum抽象類中派生的,Enum又是從ValueType派生的。
一個值類型可以實現(xiàn)一個或者多個接口,但是不能繼承基類。所有的值類型都是隱式密封的。
c#中用struct聲明結(jié)構(gòu),class聲明類。
值類型應滿足:
1、類型具有基元類型
2、類型不需要從其他任何類型繼承
3、不會作為基類
4、類型的大小不要超過16k
值類型和引用類型的不同點:
1、不能將值類型作為基類型
2、引用類型變量包含的是堆上的一個對象地址。值類型是值對象本身。
3、值類型賦值的時候會執(zhí)行一次逐字段的復制,引用類型變量賦值的時候,只復制內(nèi)存地址。
4、引用類型的多個變量可能引用堆中的同一個對象,值類型是自成一體的,互不影響的。
相關(guān)文章
利用多線程句柄設(shè)置鼠標忙碌狀態(tài)的實現(xiàn)方法
怎樣利用多線程句柄設(shè)置鼠標忙碌狀態(tài)呢?下面小編就為大家介紹一下具體的實現(xiàn)方法吧!需要的朋友可以過來參考下2013-08-08C#值類型、引用類型、泛型、集合、調(diào)用函數(shù)的表達式樹實踐
本文詳細講解了C#值類型、引用類型、泛型、集合、調(diào)用函數(shù)的表達式樹實踐,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01C#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明
這篇文章主要介紹了C#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12C# FileSystemWatcher 在監(jiān)控文件夾和文件時的使用方法
這篇文章主要介紹了C# FileSystemWatcher 在監(jiān)控文件夾和文件時的使用方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以參考下2020-06-06