在C++/CLI中使用值類有什麼好處。值類中是否包含成員函數?C++/CLI中的值類
回答
a value class
是ValueType
- 這意味着,無論何時將其分配給另一個相同類型的變量,整個對象都將被複制到另一個變量中,併爲您留下兩個單獨的副本。這方面的例子是基本的數字數據類型,如int
,bool
或double
。 ValueTypes
是密封的,這意味着你不能從它們派生。
A ref class
是一個引用類型 - 如果將它分配給另一個相同類型的變量,則只複製一個引用。所以這兩個變量基本上「指向」相同的數據。
因此,value class
和ref class
之間的主要區別是複製語義。兩者都可以包含方法,字段屬性等。此外,你不能從value class
派生。
在此上下文中使用class
和struct
關鍵字之間的差異是成員的默認可見性。對於ref/value class
和public
對於ref/value struct
是private
。
一個常見的誤解是,value/ref指定存儲位置(value = stack,ref = heap)。每個對象的存儲位置,無論是ValueType還是引用類型,都是一個實現細節,無人應依賴或做出假設,並且完全由運行時決定哪個存儲位置在任何給定的上下文中都適用。
那麼爲什麼只有ref類可以繼承而不是值類 – 2012-02-14 11:38:43
這是因爲根據CLI規範,ValueTypes被封爲「避免處理值切分的複雜性」。更新了我的答案。 – Botz3000 2012-02-14 11:46:33
感謝您的信息Botz3000 – 2012-02-14 11:52:48
- 1. 引用類型.NET中的值類型
- 2. 設置其他類的值,在其他類中獲取值
- 3. 獲取某個類中每個值的屬性值類型
- 4. 枚舉的返回值,但類與類中的類
- 5. buttonlistener類的值
- 6. swift中類'nil'中的所有值
- 7. python中每個子類中的類變量的不同值
- 8. 將主類中的值傳遞給Java中的其他類
- 9. 將行爲類中的值傳遞給symfony中的model類
- 10. 無法將類型'[CFString]'的值賦值爲類型'[String]'的值
- 11. 無法將類型'nil'的值賦值爲類型'NSMutableArray'的值
- 12. 無法將類型'[UIImage?]'的值賦值爲類型'String'的值
- 13. 如何分配引用類型類中的值類型屬性?
- 14. 類型類中的類型值構造函數
- 15. 引用類型在VB.NET中的行爲類似於值類型
- 16. Scala中的值類的層次結構?
- 17. 類中的輸入域的jquery值
- 18. 單獨的類中的方法 - UPC值
- 19. 生成的類中的空值
- 20. QDomNode QT中的子類的讀取值
- 21. 獲取Typescript類中的值的總和
- 22. ORDER BY類似值的數列中的
- 23. 查看Scala中的類方法的值
- 24. Go中的int類型的最大值
- 25. 如何從子類中獲取父類中的值(在嵌套類中)?
- 26. 類別值類型成員的類型不匹配值參數
- 27. 從R類中的S4類輸出中檢索一個值
- 28. 無法在類中的另一個類中切換布爾值
- 29. 從類中提取值
- 30. ESP8266WebServer在類中設置值
它有很多缺點。至少使C++/CLI語法變得繁瑣,太多程序員不恰當地使用帽子。但是一個無與倫比的,它使代碼快速。任何一本體面的.NET書都會談論它們,一定要閱讀一本。 – 2012-02-16 12:08:37