2009-04-18 68 views
1

我一直在尋找可能在嵌套類中獲得的優勢。關於如何做到這一點,有很多例子,但我沒有發現關於在另一個班級中宣佈班級的原因。我甚至諮詢了我剛到的「代碼完成」,但是那裏也沒有提到。我可以看到它難以閱讀的缺點。嵌套類的原因是什麼

+0

這個問題可以做出語言不可知的? – dfa 2009-04-18 16:16:23

回答

11

通常,嵌套類僅用於支持其容器類的功能,並且本身沒有可行性。例如,它可以用來收集大量參數用於初始化,以保持主類的構造器可管理;或者它可以繼承定義支持主類的專用集合。

從語義上講,對於一個單獨的類沒有區別,但是嵌套會發送一個明確的消息,指出該類不能獨立使用。

+1

「[...]但嵌套發送一個明確的消息,該類自己沒有意義。」是我認爲的重要一點。 +1! – Gregor 2009-04-18 16:05:35

0

使用它們,如果父類需要一些模型來工作,但不是所有其他類。因此,一些數據的內部表示/助手。

0

我通常使用它們聲明爲private,所以它們可以用於只在外部類中需要的某些funcionality,保持名稱空間不需要輔助類。

0

從我的角度來看,嵌套類不是強制性的。我通常只在一個類中嵌套一個類,只是與一個特定的類有關。

2

有與製作嵌套類結束幾個設計決定:

    你想更明確的兩級之間的關係
  • ;一個 。名字更明確的兩個班在同一個命名空間
  • 上下文相關的類如上下文,服務一流的封閉頂級嵌套類,使這種依賴更清晰「這些東西去togheter」
  • 避免命名空間污染
  • 減少源文件的數量

所以有嵌套類後面兩個原則:依賴更好地組織

0

您可能會使用嵌套類對外部類的實現中涉及的概念進行建模,但與外部類緊密關聯,以至於嵌套類在任何其他上下文中都無法使用。嵌套類具有可見性,並且可能明確依賴於不屬於其公共API的外部類的詳細信息。

一種常見模式是嵌套類實現公共接口,外部類通過返回類型爲公共接口的方法公開嵌套類的實例。迭代器模式就是這樣的一個例子。