3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
復(fù)制或比較實(shí)例沒有意義(例如,窗口) 實(shí)例生存期與外部影響相關(guān)聯(lián)(例如,TemporaryFile) 實(shí)例只是“接收器”-只寫到外部狀態(tài)的管道(例如CGContext)。
結(jié)構(gòu)實(shí)例總是通過值傳遞,類實(shí)例總是通過引用傳遞。這意味著它們適合于不同類型的任務(wù)。在考慮項(xiàng)目所需的數(shù)據(jù)結(jié)構(gòu)和功能時(shí),請(qǐng)確定每個(gè)數(shù)據(jù)結(jié)構(gòu)應(yīng)該定義為類還是結(jié)構(gòu)。
作為一般指導(dǎo)方針,考慮在下列一個(gè)或多個(gè)條件適用時(shí)創(chuàng)建一個(gè)結(jié)構(gòu):
該結(jié)構(gòu)的主要目的是封裝一些相對(duì)簡(jiǎn)單的數(shù)據(jù)值。 在分配或傳遞該結(jié)構(gòu)的實(shí)例時(shí),可以合理地預(yù)期封裝的值將被復(fù)制,而不是引用。 結(jié)構(gòu)存儲(chǔ)的任何屬性本身都是值類型,它們也將被復(fù)制而不是引用。 該結(jié)構(gòu)不需要從另一個(gè)現(xiàn)有類型繼承屬性或行為。
良好的結(jié)構(gòu)候選例子包括:
幾何形狀的大小,可能封裝了一個(gè)寬度屬性和一個(gè)高度屬性,兩者都屬于Double類型。 一種在系列中引用范圍的方法,可能會(huì)封裝Int類型的Start屬性和Length屬性。 三維坐標(biāo)系中的一個(gè)點(diǎn),可能封裝了x、y和z的屬性,每個(gè)屬性都是Double類型的。
在所有其他情況下,定義一個(gè)類,并創(chuàng)建要通過引用管理和傳遞的該類實(shí)例。實(shí)際上,這意味著大多數(shù)自定義數(shù)據(jù)構(gòu)造應(yīng)該是類,而不是結(jié)構(gòu)。
- 3 回答
- 0 關(guān)注
- 569 瀏覽
添加回答
舉報(bào)