GUID屬性的必要性是什麼?爲什麼不讓編譯器自動處理?!爲什麼首先需要GUID屬性?
回答
如果編譯器自動處理它,你最終會遇到以下兩種情況之一。
每次編譯時新的GUID - 因爲GUID應該發佈,所以這會失敗。衝突 - 如果GUID每次都是相同的,基於(比如說)哈希名稱,多個項目最終會使用相同的GUID用於不同的目的。
現有方法 - 明確的GUID使開發人員能夠根據需要控制這些方法。
有時候你想給某些類或模塊一個唯一的標識符,這個標識符在源代碼中是固定的和硬編碼的。
你可以這樣做(只是省略屬性),但是編譯器會在每次重新編譯時都會生成一個新的GUID,即使接口沒有改變。這是不幸的,因爲該接口的用戶不知道有關更改,並將檢索通過它的舊GUID的接口,因此將無法檢索它。
這些屬性對COM很重要。這是.NET的前身,在九十年代Java搶盡風頭之前就有了鼎盛時期。 .NET需要與COM兼容才能獲得成功。換句話說,您需要能夠使用.NET語言編寫COM服務器,這是一個大型的傳統程序可以使用的。
[ComVisible]屬性確保COM客戶端程序可以看到並使用IEnumerable接口。必須允許客戶端程序枚舉.NET集合。
[Guid]屬性在COM中至關重要,它標識了一個接口。這是通過guid而不是名稱來完成的,以確保它在由不同程序員編寫的多個應用程序中是唯一的。 .NET也有這個,但是使用一個名字來使它更容易在人類身上。 「System.Collections.IEnumerable,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089」。
IEnumerable <>,通用版本沒有[Guid]。泛型與COM不兼容。這些日子並不重要,周圍沒有太多可見的COM,大部分已經被友好的.NET類包裝了。但在Windows中仍然非常重要,特別是在全新的WinRT(又名Metro)中。你也不要直接使用它,使COM有點像Windows編程的彙編語言。
要閱讀此定義,您需要查看每個屬性的含義。第一個,ComVisibleAttribute
描述爲:
控制對COM中單個託管類型或成員或程序集中所有類型的可訪問性。
這告訴我們ComVisible
與COM有關,可以讓我們指定某個特定類型是否對COM程序可見。進一步在頁面上的鏈接是關於屬性是什麼以及類型庫導出器如何使用它的更多細節的鏈接。
第二,GuidAttribute
,是有點不太有用起初:
提供一個明確的System.Guid時自動GUID是不可取的
但同樣,你必須閱讀休息一路下來,你會看到另一種類型庫出口商。
把這兩個放在一起,它開始變得清晰,這兩個屬性控制着如何導出到一個類型庫時處理IEnumerator
。如果你不知道類型庫是什麼,這可能對你沒有多大意義。如果你不使用COM互操作,那麼這些屬性可以安全地被忽略。如果您使用COM interop的爲,則需要知道Guid
才能從非託管COM代碼正確訪問該接口。
微軟將這些放在每個接口定義上,以防需要它們;閱讀MSDN頁面的一部分技能是識別這種類型的信息並知道它何時對你沒有任何用處。現在你知道這兩個屬性的用途了,你應該能夠弄清楚它們是否與你有關,否則就忽略它們。
- 1. 爲什麼windbg命令首先。要麼 !
- 2. AttributeError:爲什麼模塊首先導入不註冊爲屬性?
- 3. 爲什麼在這個Linq-To-Xml查詢中首先需要?
- 4. 爲什麼需要使用OnModelCreating(首先是MVC 5 EF代碼)?
- 5. 爲什麼我甚至需要首先序列化?
- 6. 組合框需要什麼屬性?
- 7. EntityFramework Code首先對屬性獲取者/設置者做什麼?
- 8. 爲什麼返回值需要是NRVO首先聲明的本地值?
- 9. 爲什麼我需要將此指針作爲屬性?
- 10. 爲什麼我們需要爲公共領域添加屬性?
- 11. 爲什麼它首先調用bool_function?
- 12. 實體框架TPC:爲什麼BaseEntity ID需要是Guid類型?
- 13. 爲什麼{{}}在src屬性中不起作用?爲什麼我需要ngSrc?
- 14. 爲什麼代碼首先要創建索引列?
- 15. 爲什麼要優先
- 16. Jquery首先加載什麼
- 17. 什麼首先執行?
- 18. 爲什麼一個類需要數據合同屬性,另一個不需要
- 19. 在Java中,爲什麼某些變量首先需要初始化,其他變量只需要聲明?
- 20. Git Fast-Forward Merge需要首先拉動
- 21. 爲什麼NSCell不贊成使用,爲什麼首先推出?
- 22. 爲什麼Java中需要易失性
- 23. 爲什麼我們需要在C#屬性
- 24. 爲什麼Code First類需要導航屬性?
- 25. 爲什麼我不需要這個Core Data屬性的ivar?
- 26. 需要幫助調試爲什麼沒有設置屬性/ null
- 27. 爲什麼定製xib需要UIView屬性
- 28. 爲什麼我想模擬的屬性需要虛擬?
- 29. 爲什麼自動屬性需要getter和setter?
- 30. 爲什麼ViewModel需要實現INotifyPropertyChanged或使用依賴屬性?
因此,手動使用該屬性的「健康習慣」,還是隻在某些情況下才需要? – Nissim 2009-07-01 06:35:21