亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

引用類型和值類型在c#中有什么區別?

引用類型和值類型在c#中有什么區別?

長風秋雁 2019-06-01 14:36:29
引用類型和值類型在c#中有什么區別?幾個月前有人問我這個問題,我無法詳細解釋。在C#中,引用類型和值類型之間有什么區別?我知道值類型是int, bool, float,等等和引用類型是delegate, interface等或者這也是錯的?你能用專業的方式向我解釋一下嗎?
查看完整描述

4 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

你的例子有點奇怪,因為intboolfloat是特定類型,接口和委托是種類類型-就像structenum是各種價值類型。

我寫過參考類型和價值類型的解釋在本文中..我很樂意對你認為令人困惑的任何細節進行擴充。

“TL;DR”版本是考慮特定類型的變量/表達式的值。對于值類型,值是信息本身。對于引用類型,該值可以是空引用,也可以是導航到包含信息的對象的一種方法。

例如,把變量想象成一張紙。它可能有“5”或“假”的價值,但它不可能有我的房子.它必須有方向去我家。這些指示相當于參考。特別是,兩個人可以有不同的紙,里面有相同的方向到我的房子-如果有一個人遵循這些方向,把我的房子涂成紅色,那么第二個人也會看到這種變化。如果他們倆都分開圖片我的房子在紙上,然后一個人給他們的紙上色,根本不會改變另一個人的紙。


查看完整回答
反對 回復 2019-06-01
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

價值類型:

保存一些值而不是內存地址

例子:

結構

儲存:

TL;DR:變量的值存儲在被銷毀的任何地方。例如,局部變量存在于堆棧中,但當作為成員在類中聲明時,它會與聲明在其中的類緊密耦合在堆上。
更長因此,值類型存儲在聲明它們的任何位置。例如:int函數中作為局部變量的值將存儲在堆棧中,而int類中聲明為成員的值將與類中聲明的類一起存儲在堆中。類上的值類型具有與其聲明的類完全相同的生命類型,幾乎不需要垃圾收集器工作。深度C#“或他的文章”.NET中的內存“為了更簡潔的解釋。

優勢:

值類型不需要額外的垃圾收集。它與它所在的實例一起收集垃圾。方法中的局部變量在方法離開時被清除。

缺點:

  1. 當大量值傳遞給方法時,接收變量實際上是復制的,因此內存中有兩個冗余值。

  2. 因為課程被漏掉了,失去了所有的OOP利益

參考類型:

持有值而非值的內存地址。

例子:

班級,等級

儲存:

儲存在堆上

優勢:

  1. 當將引用變量傳遞給方法時,它確實會更改原始值,而在值類型中,則會獲取給定變量的副本,而該值將被更改。

  2. 當變量的大小較大時,參考類型是好的。

  3. 當類作為引用類型變量出現時,它們提供了可重用性,從而有利于面向對象的編程。

缺點:

在分配時引用更多的工作,在讀取值時取消引用。垃圾收集器的額外重載


查看完整回答
反對 回復 2019-06-01
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我發現,如果你知道計算機如何在內存中分配東西,并且知道指針是什么,就更容易理解兩者的區別。

引用通常與指針相關聯。意味著您的變量所在的內存地址實際上持有另一個內存地址在不同的內存位置中的實際對象。

我要給出的例子過于簡單化了,所以就拿這個例子來說吧。

假設計算機內存是一行中的一堆PO框(從w/POBox 0001到POBox n),它們可以在其中容納一些東西。如果PO框不適合您,請嘗試一個哈希表、字典、數組或類似的東西。

因此,當你做以下事情時:

變量a=“Hello”;

計算機將執行以下操作:

  1. 分配內存(例如從內存位置1000開始,5字節),并將H(在1000),e(在1001),l(在1002),l(在1003)和o(在1004)。
  2. 在內存中的某個位置分配(例如在位置0500),并將其賦值為變量a。


    所以有點像化名(0500是a)。
  3. 將該內存位置(0500)的值賦給1000(這是字符串Hello在內存中開始的位置)。因此,變量a持有

    參照系

    到“Hello”字符串的實際啟動內存位置。

值類型將在其內存位置保存實際的東西。

因此,當你做以下事情時:

變量a=1;

計算機將執行以下操作:

  1. 分配一個內存位置,例如0500,并將其分配給變量a(相同的別名)
  2. 將值1放入其中(在內存位置0500)。


    注意,我們沒有分配額外的內存來保存實際值(1)。因此,a實際上持有

    實際價值

    這就是為什么它被稱為價值類型。


查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 582 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號