在類別和結構之間選擇
類別是參考型別,而結構則是實值型別。 參考型別是在堆積上配置,且記憶體管理是由記憶體回收行程所處理。 實值型別是在堆疊上配置或內嵌,而且在超出範圍時會解除配置。 一般來說,實值型別的配置成本要比解除配置的成本低。 但是,如果是在需要大量 Boxing 和 Unboxing 的情況下使用,其執行效能與參考型別相較之下會比較不理想。 如需詳細資訊,請參閱Boxing 和 Unboxing (C# 程式設計手冊)。
如需實值型別和參考型別的詳細資訊,請參閱一般型別系統。
如果型別的執行個體很小,且通常存留期很短或是內嵌在其他物件中,請考慮定義結構而非類別。
除非型別具有下列所有特性,否則不要定義結構:
它會以邏輯方式表示單一值,類似於基本型別 (整數、雙精度浮點數 (Double) 等)
它的執行個體小於 16 個位元組
它是不變的
它不需經常進行 Boxed 處理
如果未滿足其中一個或多個條件,則要建立參考型別,而非結構。 無法遵守這個方針可能會對效能有負面的影響。
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計指引的詳細資訊,請參閱"框架設計準則:公約、 成語和可重複使用的模式。網路圖書館"書 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 衛斯理,發表。