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

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

c#中值類型和引用類型的區別

c#中值類型和引用類型的區別

C#
繁花不似錦 2019-03-20 14:13:28
c#中值類型和引用類型的區別
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

1、速度上的區別

值類型存取速度快,引用類型存取速度慢。

2、用途上的區別

值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用。

3、來源上的區別

值類型繼承自System.ValueType,引用類型繼承自System.Object

4、位置上的區別

值類型的數據存儲在內存的棧中,引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的地址。

5、類型上的區別

值類型的變量直接存放實際的數據,而引用類型的變量存放的則是數據的地址,即對象的引用。

6、保存位置上的區別

值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實際數據的地址保存在堆棧中,而實際數據則保存在堆中。

例如:

字符串類型,而堆棧則用于存儲固定長度的數據,如整型類型的數據int(每個int變量占用四個字節)。

數據存儲的位置可以得知,當把一個值變量賦給另一個值變量時,會在堆棧中保存兩個完全相同的值;而把一個引用變量賦給另一個引用變量,則會在堆棧中保存對同一個堆位置的兩個引用,即在堆棧中保存的是同一個堆的地址。

在進行數據操作時,對于值類型,由于每個變量都有自己的值,因此對一個變量的操作不會影響到其它變量;對于引用類型的變量,對一個變量的數據進行操作就是對這個變量在堆中的數據進行操作,

如果兩個引用類型的變量引用同一個對象,實際含義就是它們在堆棧中保存的堆的地址相同,因此對一個變量的操作就會影響到引用同一個對象的另一個變量。



查看完整回答
反對 回復 2019-03-23
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

舉例:
應用類型:
數組(派生于System.Array)
用戶用定義的以下類型:
類:class(派生于System.Object);
接口:interface(接口不是一個“東西”,所以不存在派生于何處的問題。Anders在《C# Programming Language》中說,接口只是表示一種約定[contract]);
委托:delegate(派生于System.Delegate)。
object(System.Object的別名);
字符串:string(System.String的別名)。
可以看出:

引用類型與值類型相同的是,結構體也可以實現接口;
引用類型可以派生出新的類型,而值類型不能;
引用類型可以包含null值,值類型不能(可空類型功能允許將 null 賦給值類型);
引用類型變量的賦值只復制對對象的引用,而不復制對象本身。而將一個值類型變量賦給另一個值類型變量時,將復制包含的值。
對于最后一條,經?;煜氖莝tring。我曾經在一本書的一個早期版本上看到String變量比string變量效率高;我還經常聽說String是引用類型,string是值類型,等等。

值類型 :
C#的所有值類型均隱式派生自System.ValueType:

結構體:struct(直接派生于System.ValueType);
數值類型:
整型:sbyte(System.SByte的別名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);
浮點型:float(System.Single),double(System.Double);
用于財務計算的高精度decimal型:decimal(System.Decimal)。
bool型:bool(System.Boolean的別名);
用戶定義的結構體(派生于System.ValueType)。
枚舉:enum(派生于System.Enum);
可空類型(派生于System.Nullable<T>泛型結構體,T?實際上是System.Nullable<T>的別名)。
每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

C# 支持兩種變量類型:

? 值類型 — 這些是內置的基本數據類型,例如 char、int、float等基本數據類型(string除外) 、枚舉以及用 struct 聲明的用戶定義類型。

? 引用類型 — 從基本類型構造而來的類和其他復雜數據類型。如:類、接口、數組和字符串。這種類型的變量并不包含類型的實例,而只是包含對實例的引用。
值類型和引用類型的區別在于他們在內存中的存儲方式,值類型存貯在棧中,引用類型的內存單元中只存放對象的地址,而對象本身存貯在內存堆中。
值類型在內存中引用的時候會在堆棧中創建一個全新的副本,而不是簡單的引用;而引用類型只是簡單的引用對象的地址。



查看完整回答
反對 回復 2019-03-23
  • 3 回答
  • 0 關注
  • 659 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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