簡體   English   中英

為什么“ System.Version”是引用類型(類)而不是值類型(結構)?

[英]Why is the 'System.Version' a reference type (class) and not a value type (struct)?

如果我查看.NET類型System.Version的成員,最好創建一個值類型(C#結構)而不是引用類型(類)的類型。

Microsoft決定以這種方式實現該類型的原因或參數可能是什么? 它是一種簡單的“錯誤” /錯誤/不足之處還是“功能”(換句話說:“真的想要和有用”)?

有一些類似Parse()TryParse()的方法 ,這些方法通常用於值類型,例如System.Int32System.DoubleSystem.Guid System.Version的屬性僅存儲短和整數值(例如System.TimeSpan ),類型本身是可比較的(與運算符一起使用),並且作為結構,可能不需要使其可克隆。

我沒有任何反對這種“現狀”的東西,只是為了滿足我的好奇心;-)

編輯:添加了對System.TimeSpan的比較。

我不能肯定地說,但是原因之一可能是不變性。 Version類中的屬性都是只讀的。 盡管可以在結構中聲明readonly字段,但Eric Lippert指出, 在結構字段上只讀是lie

將其設置為類可確保不變性。

根據Microsoft 自己的指南 ,當實例至少為16個字節時,您應該更喜歡類而不是結構。 由於System.Version存儲了四個Int32,每個Int32包含四個字節,總共16個字節,因此他們遵循自己的建議並將其設為一個類。

在設計過程中可能涉及的另一點是Version是ComVisible。

這樣,將它作為一個共類(行為,不保證內部布局)公開給COM而不是作為COM結構(它指定一個像C結構那樣的內存布局)更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM