C#中正常類型和匿名類型之間的區別是什麼,關於運行時的編譯過程和內存管理?匿名類型比普通類型更有效嗎?正常類型和匿名類型有什麼區別?
回答
什麼是正常的類型和匿名類型在C#中關於在運行時內存管理之間的區別?匿名類型在某種程度上比普通類型更低效嗎?
匿名類型是既不多也比一般的內部類使用構造,只讀字段,以及GetHashCode
和ToString
一個實現以下。就運行時而言,沒有什麼特別的。運行時不知道它們是「匿名的」;運行時將它們視爲另一個類。生成的代碼沒有意思。
關於編譯過程,C#中的正常類型和匿名類型有什麼區別?
我不知道這個問題意味着要問什麼。
謝謝,對於最後一個問題感到抱歉,它太寬泛了。我的意思是,這兩種類型都是以不同的方式編譯的?也許一個比另一個分配更多或更少的內存?或者編譯器在使用匿名類型時是否已經存在或者不存在很大的代價? –
@ guillegr123:好吧,像編譯器開發人員一樣思考。根據規範,您必須能夠識別同一個程序集中兩次使用「相同」匿名類型的情況,其中「相同」的意思是字段的數量,類型和名稱是相同的,並且在相同的順序。你將如何實現必須跟蹤(類型,名稱)對的兩個列表是否相同的代碼? –
謝謝。所以這意味着匿名類型可以在相同的範圍內重用,如果它使用的字段的數量,類型和名稱相同?例如:'a = new {x = 1,y = 1}; b = new {x = 2,y = 3};' –
MSDN來自: -
匿名類型提供一種方便的方式來封裝一組 只讀屬性到一個單一的對象,而無需首先 明確地定義一個類型。類型名稱由編譯器 生成,並且在源代碼級別不可用。編譯器推斷 屬性的類型。
備註:
匿名類型是直接從對象派生引用類型。 編譯器給他們一個名字,儘管你的應用程序不能訪問 它。從公共語言運行時的角度來看,匿名 類型與其他任何引用類型沒有區別,但 不能轉換爲除對象外的任何類型。
並且可以被分配到一個「動態」,他們也不能離開它們被創建的範圍,除非它們被分配給一個對象或動態的,但是因爲你不能將它從一個對象中退出,如果你想要從一個函數返回一個匿名對象,你的函數應該返回動態類型。 – ohmusama
@ohmusama:你的說法通常被認爲是錯誤的。考慮函數:'static T M
@EricLippert好的,如果我在函數中創建它,而不通過它,我該如何解決它。因爲這個例子和說'var anon = new {X = 1};' – ohmusama
- 1. 複合類型和匿名類型有什麼區別?
- 2. 泛型類型和泛型類型定義有什麼區別?
- 3. 將類型用作不同名稱和類型別名有什麼區別?
- 4. 匿名類型,什麼時候有用?
- 5. 選項類型和可空類型有什麼區別?
- 6. 有什麼區別擴展類型和類型
- 7. ASN.1枚舉類型和選擇類型有什麼區別?
- 8. 兩種(類型)值和類型(值)有什麼區別?
- 9. 潛類型和Manifest類型有什麼區別?
- 10. 類型1和類型2模糊邏輯有什麼區別?
- 11. C++「類型推導」和Haskell「類型推論」有什麼區別?
- 12. Cython中numpy「類型標識符」和「類型」有什麼區別?
- 13. 類型定義和類型引用有什麼區別?
- 14. Haskell中的類型和數據類型有什麼區別?
- 15. 類型轉換和類型斷言有什麼區別?
- 16. 匿名類型和泛型
- 17. 裝配類型 - 有什麼區別
- 18. Rails數據類型有什麼區別?
- 19. 文檔類型有什麼區別
- 20. 匿名類型
- 21. 匿名類型
- 22. 匿名類型
- 23. 匿名類型
- 24. (類型)值和類型(值)之間的區別是什麼?
- 25. Haskell中的類型構造函數和java泛型類型有什麼區別?
- 26. 什麼是C#中的匿名類型?
- 27. 基元類和基元數據類型有什麼區別?
- 28. 類型別名和類型lambda之間的區別
- 29. super()和Parent類名有什麼區別?
- 30. 匿名類型和元組
效率被定義爲產值除以資源消耗。你關心什麼價值和什麼資源? –