Effective C# Item7:將實值型別儘可能實現為具有常量性和原子性的類型

來源:互聯網
上載者:User

    在建立實值型別執行個體時,應該儘可能將其實現為具有常量性和原子性,所謂常量性,就是說對象在建立後就不會被改變,類似於我們在程式中定義的常量,這種形式的實值型別只要被建立好後,就可以認為它的狀態一直是不變的,這樣它就是安全執行緒的。

    原子性是指實值型別中某些具有關聯關係的欄位,例如生日和年齡,年齡是根據生日計算得來的,如果對象的使用方只是修改年齡,而不修改生日,那麼這樣的結果顯然是錯誤的。具有原子性的類型都是單一的實體,我們需要同時對相關聯的欄位進行維護。

    關於如何構建常量型的實值型別,可以分為以下兩個步驟:1)將類型中的私人欄位聲明為readonly;2)將類型中的屬性,設定為唯讀,即將屬性的set方法刪除。

    需要注意的是,在將實值型別轉換為常量型的過程中,所謂的常量,是指標對在“堆棧”中儲存的資料,對於在”堆“中儲存的資料來說,單純使用readonly設定是不夠的,這裡的”常量“只是說明指向”堆“中的記憶體位址是不會改變的,我們可以通過其他方式改變對應記憶體中的值。為瞭解決這個問題,我們需要對”堆“中的資料進行防禦性複製。

    關於如何初始化常量類型,通常有三種方式:

  1. 提供一個合適的建構函式集合。
  2. 通過Factory 方法進行建立。
  3. 提供一個Helper類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.