2012-11-14 20 views
0

看看下面的代碼:從AS3類的「引用類型」中使只讀屬性變爲真正意義嗎?

private var m_iQuanitity:int; 
public function get quantity():int 
{ 
    return m_iQuantity; 
} 

這似乎完全合理。你可以在沒有任何問題的情況下看到外部課程的數量,但是你根本無法解決這個問題。現在把下面的代碼:

private var m_acUsers:ArrayCollection = new ArrayCollection(); 
public function get users():ArrayCollection 
{ 
    return m_acUsers; 
} 

在你真的不能直接設置變量的話,但你仍然可以做到這一切在陽光下,它還有沒有任何問題。你可以調用它的AddItem和RemoveItemAt函數,這可以做很多工作來「設置」變量。

這樣做還有意義嗎?我知道你可以創建一個重複的ArrayCollection,並且只需將該副本傳回來避免讓它被設置,但是在整個地方做這種純粹用於防禦性編程的東西會浪費大量的CPU時間。所以我想我是問它是否仍然有意義,如何如此,如果我錯過了使用get和set完全的點?謝謝!

回答

2

從句法上來說,你所得到的沒有什麼問題,但第二個例子通過製作多個只讀屬性來打破「獲取」的概念。如果您需要遵守只讀策略,那麼您現在可以操縱ArrayCollection,從而破壞了該策略。

最後,它歸結爲你正在綁定什麼。這個項目對於你可以改變價值是否重要?如果您正在處理一個人數不多的項目,這種類型的編碼將要求您添加評論或者說明您正在做什麼。當你在規範之外做某些事情時,會增加混淆,所以最好簡化和堅持預期內容,避免解釋某些事情。

另外,我可以想到一些可能會導致問題的方法 - 如果將返回的屬性傳遞給其他類,它們不知道它來自哪裏並且在原始代碼中有內部代碼班級失敗。