可能重複:
What are the differences between value types and reference types in C#?基本區別
什麼值類型和rereference類型
可能重複:
What are the differences between value types and reference types in C#?基本區別
什麼值類型和rereference類型
值類型之間的基本差異,名字告訴,是存儲在內存中的值;參考進行類型是(a種)指針的對象(類,對象,等...)
的數據類型爲值類型,如果它保持在它自己的數據內存分配。引用類型包含指向保存數據的另一個內存位置的指針。
值類型
值類型包括以下內容:
引用類型
引用類型包括以下各項:
David Chappell的文章被誤認爲是誤導性的,然後......參見http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx(只有downvoted因爲堆棧/堆部分刪除,我將刪除downvote。) – 2011-03-31 14:32:15
@Jon Skeet:我剛剛刪除了那部分,對不起我的錯誤鏈接 – Marco 2011-03-31 14:34:42
右鍵。我建議你刪除「List item」位:) – 2011-03-31 14:35:28
變量引用類型(稱爲對象)存儲對實際數據的引用,有關詳細信息,請參閱here。它們包括類,接口和代表。
從MSDN:
值類型結構和 枚舉。基於值類型的變量 直接包含 值。將另一個值類型 變量分配給另一個值複製 包含的值。這與參考類型 變量的 賦值不同,該變量將引用複製到對象而不是對象本身。 所有的值類型都是從
System.ValueType
中隱式派生的 。與具有參考類型的 不同,不能從 從值類型派生新的類型。 但是,像引用類型一樣,結構體 可以實現接口。與 引用類型不同,值類型不能包含空值 。然而, 可空類型功能不會允許 值類型被分配到空
.... ......哎喲! – 2011-03-31 14:36:37
@Mr。失望,什麼? – smartcaveman 2011-03-31 14:42:44
我想他是在抱怨你在那裏的一個巨大的聯繫。 – 2011-03-31 14:46:57
考慮兩個變量:
SomeReferenceType x;
SomeValueType y;
x
的值是一個引用 - 它可以是null或對對象本身是SomeReferenceType
或派生類的實例。 x
的值本身不是對象。
的y
值是數據本身 - 如果SomeValueType
有三個字段,中y
值將直接包含這些字段。
這是一個非常簡短的總結 - 有關更多信息,請參見Eric Lippert's blog post about value types和my article。 (您可能也對我關於parameter passing的文章感興趣,這是相關的,但不完全相同。)
當您有一個值類型的變量時,該變量直接保存一個值。如果將其分配給另一個變量,則直接複製該值。當變量是引用類型時,它不直接保存該值,而是引用(指針)到該值。當您複製變量時,您不會複製它指向的值,而是複製參考(指針)。
您可以在MSDN閱讀更多關於:http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx和http://msdn.microsoft.com/en-us/library/490f96s2.aspx
我更願意談論在兩種情況下工作方式相同的賦值 - 在每種情況下,都會複製變量*的*值,無論該值是直接包含數據還是引用。 – 2011-03-31 14:36:58
可能的欺騙:http://stackoverflow.com/questions/3272861/reference-and-value-types-scenario,或http://計算器。 COM /問題/ 1658985 /什麼,是一個價值類和-什麼,是一個參考級式-C。所以,現在你有兩個Jon Skeet的答案 - 幸運的你! – 2011-03-31 14:29:49