微軟已經使用結構如下規則:C#類VS結構
考慮定義一個類的結構,而不是如果 類型的實例是小的和普遍短命或通常嵌入在 其他物體。
不要定義的結構,除非該類型具有所有以下特徵:
- 它在邏輯上表示單個值,類似於原始類型(整數,雙,和等等)。
- 它的實例大小小於16個字節。
- 它是不可變的。
- 它不會經常被裝箱。
據我瞭解,你當你想要一個價值型行爲創建結構。當然,這可以讓您在分配和傳遞給函數時複製開銷。但你爲什麼要追隨#2和#3?如果你的價值類型太大了會怎麼樣?此外,我不明白你爲什麼會將不可變類型作爲值類型。如果類型是不可變的,那麼最好通過引用來節省時間,因爲無論如何它都不能被改變。
我問的原因是我在做一個遊戲,其中對象具有像Vector2d類型的座標,速度等屬性。問題是,我應該使Vector2d不可變結構體(不需要大量額外的內存嗎?),可變結構體(人們說它們是邪惡的)或者只是類(我將不得不始終調用vector.Clone(),否則我可能會無意間得到兩個具有相同向量變量的對象)
_「如果你的值類型太大?」_根據MS,你應該使用*類* ... – gdoron
[爲什麼是可變結構邪惡?](http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil) – GSerg
[你應該只根據你面對的實際問題提出實際的,可回答的問題。](http://stackoverflow.com/faq#dontask)那麼你的實際題? –