C#中有兩種類型的數(shù)據(jù),一種為值類型;另一種為引用類型。
值類型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等
引用類型:string、class、interface、delegate、object等
他們最大的區(qū)別就是存儲(chǔ)的位置不同,前者值類型存儲(chǔ)在內(nèi)存的棧,后者存儲(chǔ)在內(nèi)存堆中,棧中的內(nèi)存不需要自己就能回收,堆中的數(shù)據(jù)需要.Net FrameWork 自己的內(nèi)存清理機(jī)制進(jìn)行回收。
實(shí)參傳遞的是值,形參傳遞的是地址。實(shí)參傳遞打個(gè)比方:我電腦有一個(gè)文件,你用U盤(pán)來(lái)拷貝我的這個(gè)文件,那么拷貝后你把文件放在你的電腦里進(jìn)行任何的修改,都不會(huì)影響到我電腦里這個(gè)文件的內(nèi)容
-------它們占用的是兩個(gè)不同的內(nèi)存空間(你的電腦和我的電腦).形參傳遞打個(gè)比方,比如你電腦桌面上有一個(gè)txt文件,然后你再創(chuàng)建這個(gè)txt文件的快捷方式,接著你對(duì)這個(gè)快捷方式的txt文件內(nèi)容做任何修改,那么原來(lái)的txt文件
內(nèi)容也會(huì)同時(shí)被更改--------他們占用的是同一個(gè)內(nèi)存空間(你的電腦).
舉個(gè)例子:
| 對(duì)于這個(gè)函數(shù)void func(int n) 這屬于值傳遞,調(diào)用func(i)的時(shí)候,會(huì)把i拷貝一個(gè)副本,然后把這個(gè)副本傳給func函數(shù)。func函數(shù)里面的n,和外面的i,就完全沒(méi)有關(guān)系了。所以修改n不影響ivoid func(ref int n)這屬于引用傳遞,調(diào)用func(ref i)的時(shí)候,直接把i的地址傳給func函數(shù)。func函數(shù)里面的n,和外面的i,完全就是同一個(gè)地址的同一個(gè)變量 |
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注