2011-08-31 52 views

回答

4

是的,它會,因爲new。但它不重複myGameList或其內容;它只爲相同的myGameList生成新的包裝(請參閱Collection(IList<T>) constructor)。

如果你想防止這一點,並返回一個集合,你可以初始化支持字段,而不是和你的吸氣拿到場(假設_myGameList已初始化過):

private Collection<T> _myGameCollection = new Collection<T>(_myGameList); 

public Collection<T> GameCollection 
{ 
    get { return _myGameCollection; } 
} 
+0

我這樣做,但我無法想象,我想要公開每個列表,我必須創建一個包裝。 –

+0

爲什麼不呢?現在,對於您想要公開的每個列表,您都會創建* many * wrappers - 每次有人讀取該屬性時都會創建一個新的列表。 –

+0

你是對的。我認爲它會以某種方式**神奇**由C#編譯器解決,哈哈;) –

0

是,它會。當您使用new關鍵字時,您始終會創建一個新實例。

0

是的,它會創建一個新的集合,但這並不像聽起來那麼糟糕。

對於大多數類型,新集合僅包含引用到每個項目。換句話說,它僅僅是集合中每個對象的額外4個字節的RAM,而不是複製所有對象的成本。當然,例外是價值類型,但您仍然需要小心使用這些類型。

1

它會創建一個Collection<T>的新實例,但每個新實例都會包裝相同的基礎集合。 (每個文檔,構造函數重載需要IList<T>wraps現有的集合。)

所以你會返回一個新的Collection<T>實例每次有人讀取性能(這是一種浪費,而且會造成大量的垃圾收集)但它會返回一些邏輯上每次都會像相同的集合一樣的東西。