1.類和結(jié)構(gòu)體的選擇
在你的代碼中,你可以使用類和結(jié)構(gòu)體來定義你的自定義數(shù)據(jù)類型。
然而,結(jié)構(gòu)體實例總是通過值傳遞,類實例總是通過引用傳遞。這意味兩者適用不同的任務(wù)。當你在考慮一個工程項目的數(shù)據(jù)結(jié)構(gòu)和功能的時候,你需要決定每個數(shù)據(jù)結(jié)構(gòu)是定義成類還是結(jié)構(gòu)體。
按照通用的準則,當符合一條或多條以下條件時,請考慮構(gòu)建結(jié)構(gòu)體:
- 該數(shù)據(jù)結(jié)構(gòu)的主要目的是用來封裝少量相關(guān)簡單數(shù)據(jù)值。
- 有理由預(yù)計該數(shù)據(jù)結(jié)構(gòu)的實例在被賦值或傳遞時,封裝的數(shù)據(jù)將會被拷貝而不是被引用。
- 該數(shù)據(jù)結(jié)構(gòu)中儲存的值類型屬性,也應(yīng)該被拷貝,而不是被引用。
- 該數(shù)據(jù)結(jié)構(gòu)不需要去繼承另一個既有類型的屬性或者行為。
舉例來說,以下情境中適合使用結(jié)構(gòu)體:
- 幾何形狀的大小,封裝一個width屬性和height屬性,兩者均為Double類型。
- 一定范圍內(nèi)的路徑,封裝一個start屬性和length屬性,兩者均為Int類型。
- 三維坐標系內(nèi)一點,封裝x,y和z屬性,三者均為Double類型。