2010-01-12 32 views
7

什麼是使一個類屬性「一次寫入,多次讀取」的最佳方法是讓你只能設置屬性一次?如何在VB.NET中創建一個屬性「Write Once Read Many」?

我知道我可以通過在構造函數中的所有屬性,使他們只讀,但在案件有很多的屬性,我不想有20多個參數的構造函數。

而且,我知道我可以「推出自己的」制定者,但不得不這樣做,對於每一個屬性,似乎像一堆冗餘編碼。

有沒有乾淨的方式在2008年.NET 3.5 VB做到這一點?

+2

相關:http://stackoverflow.com/questions/1079292/should-i-use-set-一次變量/ 1079316 – peterchen 2010-01-12 15:50:09

回答

2

追記屬性永遠不會是「乾淨」。

我建議創建一個生成器/工廠類,以避免20 PARAM構造函數。 (是的,我知道這是相當長的一段打字)

類似的討論在這裏: Should I use set once variables?

[編輯]此外,即使你堅持,我沒有看到另一種選擇不是滾動您自己制定者,這是打字也很多。

+0

謝謝。你鏈接的帖子解釋了很多,我同意你的「最小驚喜」原則。使用建造者可能是最好的解決方案。 – 2010-01-12 16:01:43

+0

使用暴露setter的一次寫入屬性並不乾淨,但這種屬性與使用「CompareExchange」的TrySet方法相結合可以具有有用的線程安全特性。例如,在鏈表清單隊列實現中,給定項目的「下一個」指針將是「null」(用於最後一個項目)或指向另一個項目。想要追加到隊列的代碼可能會嘗試寫入最後一項的「下一個」指針;如果失敗,它必須遵循'next'指針,直到找到新的最後一個項目,然後重試。 – supercat 2012-11-20 18:26:49

+0

@supercat:表示同意,但是setter應該是一個單獨的方法(如TrySet),而不是proeprty setter。所以我認爲「這不是真正的一次寫入性質」。 – peterchen 2012-11-21 13:08:13

0

「最乾淨」的辦法是不要做它在所有並使用自動屬性。我也沒有看到它的需要。他們只能寫一次真的很重要嗎?如果是這樣,我肯定會去一個構造函數,它將所有屬性的值作爲參數。

+0

我將使用此屬性的一個示例是「ID」屬性,它是該類的唯一標識符。這不是生死關頭,但它可以確保「身份證」不會被其他代碼所改變。 我不是那麼熟悉汽車性能,除了知道他們不支持我正在使用的VB版本。是否有可能讓他們寫一次閱讀許多? – 2010-01-12 15:36:39

2

我知道它已經快3年了,但這裏是我的解決方案,我認爲這是更好的:

public class Site 
{ 
    private int miID; 

    public Site(int iNewID, string sName) 
    { 
     miID = iNewID; 
     Name = sName; 
    } 
    // The ID property can only be set once in the constructor 
    public int ID 
    { 
     get { return miID; } 
    } 
    public string Name { get; set; } 
} 
+3

歡迎來到StackOverflow!你應該嘗試解釋你爲什麼認爲你的解決方案更好。 – nalply 2012-10-04 17:52:45

相關問題