2012-02-14 20 views
9

在C++/CLI中使用值類有什麼好處。值類中是否包含成員函數?C++/CLI中的值類

+0

它有很多缺點。至少使C++/CLI語法變得繁瑣,太多程序員不恰當地使用帽子。但是一個無與倫比的,它使代碼快速。任何一本體面的.NET書都會談論它們,一定要閱讀一本。 – 2012-02-16 12:08:37

回答

13

a value classValueType - 這意味着,無論何時將其分配給另一個相同類型的變量,整個對象都將被複制到另一個變量中,併爲您留下兩個單獨的副本。這方面的例子是基本的數字數據類型,如int,booldoubleValueTypes是密封的,這意味着你不能從它們派生。

A ref class是一個引用類型 - 如果將它分配給另一個相同類型的變量,則只複製一個引用。所以這兩個變量基本上「指向」相同的數據。

因此,value classref class之間的主要區別是複製語義。兩者都可以包含方法,字段屬性等。此外,你不能從value class派生。

在此上下文中使用classstruct關鍵字之間的差異是成員的默認可見性。對於ref/value classpublic對於ref/value structprivate

一個常見的誤解是,value/ref指定存儲位置(value = stack,ref = heap)。每個對象的存儲位置,無論是ValueType還是引用類型,都是一個實現細節,無人應依賴或做出假設,並且完全由運行時決定哪個存儲位置在任何給定的上下文中都適用。

+0

那麼爲什麼只有ref類可以繼承而不是值類 – 2012-02-14 11:38:43

+2

這是因爲根據CLI規範,ValueTypes被封爲「避免處理值切分的複雜性」。更新了我的答案。 – Botz3000 2012-02-14 11:46:33

+0

感謝您的信息Botz3000 – 2012-02-14 11:52:48