在具有延遲加載屬性的類,如:檢查延遲加載的特性進行了實例化
private Collection<int> someInts;
public Collection<int> SomeInts
{
get
{
if (this.someInts == null) this.someInts = new Collection<int>();
return this.someInts;
}
}
是否值得還具有一個特性,如:
public bool SomeIntsExist
{
get { return (this.someInts != null && this.someInts.Count > 0); }
}
,然後使用該屬性..例如:
if (thatClass.SomeIntsExist)
{
// do something with thatClass.SomeInts collection
}
或者這是過早的優化。它當然更容易喜歡的東西下面滾動,但它會實例化不必要的集合:
if (thatClass.SomeInts.Count > 0)
{
// do something with thatClass.SomeInts collection
}
是編譯器足夠聰明推測這樣的事情呢?有沒有更好的辦法?
順便說一下,你的代碼不是線程安全的。多個線程可能同時發現後臺字段爲空,並且每個線程都會創建一個空集合。結果,後續代碼可能會使用由線程A創建的集合一段時間,直到線程B再次用空集合覆蓋它爲止。如果您需要線程安全,您必須使用某種形式的鎖定。 – 2010-05-14 12:22:04
@Daniel,謝謝 - 好評。我意識到這些問題,但試圖保持簡單的例子:)。 – PaulG 2010-05-14 12:30:06
@Daniel「順便說一句,你的代碼不是線程安全的」。大多數框架類的實例成員不是線程安全的,所以這沒什麼不尋常的。事實上,我認爲通常最好的做法是讓一個班級的用戶保持線程安全。 – Joe 2011-03-04 10:22:06